Pokud jste do programu napsal >>>> s='Ă˝ á Ă Ă.' >>>> u = s.decode("utf8")
Pak musíte ten zdrojový kód uložit v kódování, pro které to bude fungovat a toto kódování deklarovat v hlavičce (-*- coding: cp1250). Možná bude lepší pracovat s hexadecimalnim zápisem těchto znaků, abychom se podobným problémům vyhnuli. Bohuzel teď nejsem u počítače, pak odpovím i s příkladem. Petr Messner 2. 5. 2012 v 11:06, "Jaroslav Lukesh" <luk...@seznam.cz>: > Jenže právě toto nějak nejde, řve na tom "ř": > >>>> s='Ă˝ á Ă Ă.' >>>> u = s.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 >>>> > > Tohle je převod "znaků": > ě š č ř ž ý á í é ď ť ň ó ú ů ĺ ľ ŕ ö ë ä ü > > Ä› š ÄŤ Ĺ™ Ĺľ Ă˝ á Ă Ă© ÄŹ ĹĄ Ĺ? Ăł Ăş ĹŻ Äş Äľ Ĺ• ö Ă« ä ĂĽ > > Ě Š Č Ř Ž Ý Á Í É Ď Ť Ň Ó Ú Ů Ĺ Ľ Ŕ Ö Ë Ä Ü > > Äš Ĺ ÄŚ Ĺ? Ĺ˝ Ăť Ă? ĂŤ É ÄŽ Ť Ň Ă“ Ăš Ĺ® Äą Ä˝ Ĺ” Ă– Ă‹ Ă„ Ăś > > vypadá to teda asi na mohutný replace, co? > > > ----- Původní zpráva ----- Od: "Petr Messner" <petr.mess...@gmail.com> > > 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 > _______________________________________________ > 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