Kódování řetězců v Pythonu

mico

Kódování řetězců v Pythonu
« kdy: 13. 11. 2012, 21:48:43 »
dost casto mi pada jeden skript na niecom takomto:
Kód: [Vybrat]
File "/usr/local/lib/python2.7/dist-packages/Twisted-12.2.0-py2.7-linux-armv6l.egg/twisted/words/protocols/oscar.py", line 817, in sendMessage
messageData = messageData + part[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x99 in position 3: ordinal not in range(128)

Kód: [Vybrat]
File "/usr/local/lib/python2.7/dist-packages/Twisted-12.2.0-py2.7-linux-armv6l.egg/twisted/words/protocols/oscar.py", line 829, in sendMessage
part[0] = part[0].encode('utf-8')
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xfd in position 11: ordinal not in range(128)

pouzivam http://twistedmatrix.com/ na posielanie sprav na icq. Zdrojak toho oscar.py si mozte pozriet tu :
http://twistedmatrix.com/trac/browser/trunk/twisted/words/protocols/oscar.py

je tam daky problem s kodovanim, ked poslem spravu s diakritikou a snazi sa ju poslat s5 tak to na tom padne.
Na mojom pc to celkom bezi. Ale ked to pustim na mensich zariadeniach (router, raspberry pi) tak to pada. Asi je tam niekde nastavene ASCII, len neviem kde co nastavit aby to slo.

Inac uz mi nieco take robilo aj s pyLoad, nechapem preco to nemoze mat python vyriesene automaticky ...

Diki ;)
« Poslední změna: 14. 11. 2012, 19:43:38 od Petr Krčmář »


na

Re:kodovanie retazcov [Python]
« Odpověď #1 kdy: 13. 11. 2012, 22:57:10 »
twisted neznám, ale zkusil bych řetězce který předáváš nejdřív zakódovat správným kódováním, např. 'řetězec'.encode('utf-8')

mico

Re:kodovanie retazcov [Python]
« Odpověď #2 kdy: 14. 11. 2012, 09:19:40 »
no tak hodim viac info :
retazec ktory tam pride vypada takto :
Kód: [Vybrat]
'\x01a\x01>\x01\r\x01e\x01~\x00\xe1\x00\xfd\x00\xed'ked nanom zavolam rovno .encode('utf-8') ako pisal na :
twisted neznám, ale zkusil bych řetězce který předáváš nejdřív zakódovat správným kódováním, např. 'řetězec'.encode('utf-8')
tak to hned padne :
Kód: [Vybrat]
multiparts = [[b.encode('utf-8') for b in a] for a in multiparts]
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe1 in position 11: ordinal not in range(128)

Skor si myslim ze tam treba nastavit dake globalne nastavenia. Lebo ako som pisal, na booku to ide, len na malych zariadeniach to nejde.
Takisto mam jeden skript ktory posiela spravy na jabber. Ked ten skript spustim ja tak sprava pride s diakritikou. Ale ked ten skript zavola svn, tak sprava pride rozbita ( namiesto diakritiky su tam /xyz ... ), ale aspon to nepada.

inac sa mozte pozriet do toho oscar.py, je to kratka f-cia : sendMessage ktora v podstate vola tiez len sprava.encode('dake').

mico

Re:Kódování řetězců v Pythonu
« Odpověď #3 kdy: 15. 11. 2012, 15:44:22 »
no tak to uz ide.
v tom twisted pouzivaju utf8, ale po nekonecno pokusoch som zistil ze text mi prichadza v utf-16-be
takze najprv to dam decode('utf-16-be'), a potom pri odosielani som upravil twisted aby to kodoval do utf-16-be namiesto utf-8

Ale nechapem preco twisted je v dakej verzii 12 a maju tam chybu, nepoznate daku funkcnu ficuru na icq pre python ?