Nejjednodušší je to převést nejdříve do Unicode a druhým krokem do požadovaného kódování. Tohle jsem dělal pod Windows na konzoli, která používá cp852:
>>> u = u"ě š č ř" >>> u u'\u011b \u0161 \u010d \u0159' >>> s = u.encode('utf-8') >>> s '\xc4\x9b \xc5\xa1 \xc4\x8d \xc5\x99' >>> u2 = s.decode('utf-8') >>> u2 u'\u011b \u0161 \u010d \u0159' >>> u3 = unicode(s, 'utf-8') >>> u3 u'\u011b \u0161 \u010d \u0159' >>> sLatin2 = u.encode('iso8859_2') >>> sLatin2 '\xec \xb9 \xe8 \xf8' .decode() nebo unicode() to převede na Unicode řetězec. .encode() to převede na požadované kódování. V názvu kódování má být oficiálně znak podtržení, ale implementace toleruje i uvedení velkých písmen a pomlček. Měj se, Petr ______________________________________________________________ > Od: "Jaroslav Lukesh" <luk...@seznam.cz> > Komu: Konference PyCZ <python@py.cz> > Datum: 27.04.2012 10:35 > Předmět: [python] Unicode/ne-unicode problem > >Dobrý den, > >potřeboval bych dostat z binárních dat utf8 na vstupu normální neunicodový >výstup, ale nějak mi to nejde. > >Vstup: znaky "ě š č ř" v utf8 již v binární formě, systém je v iso8859-2 > >Čekám že z toho nějak dostanu "ě š č ř" ale pořád nic. Jak mu říct, že 'Ă˝ >á Ă Ă.' je už v utf8? > >Děkuji, JL. > >>>> a='Ă˝ á Ă Ă.' >>>> A=unicode(a,'iso8859-2') >>>> print a >Ă˝ á Ă Ă. >>>> A=unicode(a,'utf8') >Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/var/zope/python/lib/python2.4/encodings/utf_8.py", line 16, in >decode > return codecs.utf_8_decode(input, errors, True) >UnicodeDecodeError: 'utf8' codec can't decode bytes in position 9-10: >invalid data > >>>> A.encode('iso8859-2') >'\xc3\xbd \xc3\xb7 \xc3\xad \xc3.' > >>>> a.encode('iso8859-2') >Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/var/zope/python/lib/python2.4/encodings/iso8859_2.py", line 18, in >encode > return codecs.charmap_encode(input,errors,encoding_map) >UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: >ordinal not in range(128) >>>> > >>>> A.decode('iso8859-2') >Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/var/zope/python/lib/python2.4/encodings/iso8859_2.py", line 22, in >decode > return codecs.charmap_decode(input,errors,decoding_map) >UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: >ordinal not in range(128) >>>> a.decode('iso8859-2') >u'\u0102\u02dd \u0102\u02c7 \u0102\xad \u0102.' >>>> a.decode('utf8') >Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/var/zope/python/lib/python2.4/encodings/utf_8.py", line 16, in >decode > return codecs.utf_8_decode(input, errors, True) >UnicodeDecodeError: 'utf8' codec can't decode bytes in position 9-10: >invalid data >>>> > > >_______________________________________________ >Python mailing list >Python@py.cz >http://www.py.cz/mailman/listinfo/python > _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python