[python] Unicode/ne-unicode problem

Jaroslav Lukesh lukesh na seznam.cz
Středa Květen 2 11:50:58 CEST 2012


Je to proměnná, kde obsah byl získaný ze streamu dat.

>>> a='Ă˝ á Ă­ Ă.'
>>> repr(a)
"'\\xc3\\xbd \\xc3\\xb7 \\xc3\\xad \\xc3.'"

Dík, JL.


----- Původní zpráva ----- 
Od: "Petr Přikryl" <prikryl na atlas.cz>


Ten nečitelný řetězec je zapsaný ve zdrojovém textu, nebo je načtený ze 
souboru?
Když mám v proměnné UTF-8 bajty, tak musím udělat .decode() nebo unicode(),
ale jako parametr musím uvést to 'utf-8'.

Posloupnost bajtů v kódovaní UTF-8 je jednou z možných reprezentací Unicode
řetězce.  Vznikla tedy zakódováním (například u.encode('utf-8')) unicodového 
řetězce.
Když z toho chci dostat zpět Unicode řetězec, musím provést dekódování,
takže u = s.decode('utf-8') nebo u = unicode(s, 'utf-8').

Je možné, že je ta posloupnost bajtů porušená, pak to může řvát, že neví co 
s tím.
Pošli sem, jak vypadá repr(a) (pokud je to pro Python 2).

Ptej se dál, ono se to vyjasní.

P.

______________________________________________________________
> Od: "Jaroslav Lukesh" <lukesh na seznam.cz>
> Komu: Konference PyCZ <python na 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 na py.cz
>http://www.py.cz/mailman/listinfo/python
>
_______________________________________________
Python mailing list
Python na py.cz
http://www.py.cz/mailman/listinfo/python 



Další informace o konferenci Python