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" <[email protected]>:
> 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" <[email protected]>
>
> 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" <[email protected]>:
>
>> 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" <[email protected]>
>>
>>
>> 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" <[email protected]>
>>> Komu: Konference PyCZ <[email protected]>
>>> 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
>>> [email protected]
>>> http://www.py.cz/mailman/listinfo/python
>>>
>> _______________________________________________
>> Python mailing list
>> [email protected]
>> http://www.py.cz/mailman/listinfo/python
>> _______________________________________________
>> Python mailing list
>> [email protected]
>> http://www.py.cz/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> [email protected]
> http://www.py.cz/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> [email protected]
> http://www.py.cz/mailman/listinfo/python
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python