Dobrý den, pokud v proměnné s máte 'Ă˝ á Ă Ă.', pak zavoláním u = s.decode("utf8") z toho dostanete unicode řetězec. S ním pak můžete dále pracovat nebo ho převést do jiného kódování. Pokud ho chcete zobrazit na Windows v kódování cp1250, zkuste u.encode("cp1250").
Je nutné si uvědomit, ze unicode řetězec nejde přímo zobrazit - vždy to bude jen nejaká jeho podoba v některém kódování. Třeba print v 2.x automaticky použije kódování např. z LANG. Je dobré v programu vždy pracovat s unicode, mit správně nastavené vstupy a výstupy tak, aby unicode správně kódovaly a dekódovaly, a pak se o nějaké kódování už vůbec nestarat. Samozřejmě pokud máte nejaky vstup, u kterého jste si jistý, že vám bude dodávat řetězce v utf-8, první (a jediné), co uděláte, je decode("utf-8") :) Petr Messner 2. 5. 2012 v 10:16, "Jaroslav Lukesh" <luk...@seznam.cz>: > Děkuji, ale nechápu, jak proměnné říct, že už obsahuje text v kódování UTF8. > > Mám proměnnou, která obsahuje 'Ă˝ á Ă Ă.' tedy přesněji, toto je ve > windowsech vidět, když si zobrazíte utf8 v cp1250. Python mám ale na Linuxu v > LANG=cs_CZ.iso8859-2. Ty znaky v UTF8 tam jdou binárně zvenčí a nevím jak > pythonu říct, že to má považovat za utf8. > > Chtěl bych to udělat systémově, než na ten vstup poštvat 50x replace. > > Děkuji, JL. > > ----- Původní zpráva ----- Od: "Petr Přikryl" <prik...@atlas.cz> > > > 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 > _______________________________________________ > 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