[python] Unicode/ne-unicode problem
Jaroslav Lukesh
lukesh na seznam.cz
Středa Květen 2 13:55:44 CEST 2012
Myslím že jsem to zkopíroval celé, ale mohlo mi něco utéct. Jenže teď to mám
z uložených poznámek v PSpadu, tak ten do toho taky kecal a teď je to úplně
jinak, než to co jsem v pondělí kopíroval přímo do promptu, ach jo.
No nic, musím to znova vygenerovat.
----- Původní zpráva -----
Od: Petr Messner
Komu: Konference PyCZ
Odesláno: 2. května 2012 13:33
Předmět: Re: [python] Unicode/ne-unicode problem
Ono to možná nikam nevede. Bez posledních dvou znaků je to OK:
>>> print "\xC3\xBD \xC3\xB7 \xC3\xAD".decode("utf8")
ý ÷ í
Ono za \xC3 musí z definice UTF-8 následovat bajt, který má nastavený
nejvyšší bit, a to obyčejná tečka není snad v žádném kódování, rozhodně v
žádném založeném na ASCII jako je cp1250, latin1, latin2 atd.
Prostě si myslím, že tohle: 'Ă˝ á Ă Ă.' je špatně, nějak useknuté, něco
vynechané apod.
Můžete nám ten zdroj dat v UTF-8 nějak popsat? Je to nějaká databáze?
PM
Dne 2. května 2012 13:08 Jaroslav Lukesh <lukesh na seznam.cz> napsal(a):
Mezitím jsme v jiném threadu zjistili, že jde o utf8 zapsané v cp1250,
ale i tak mám tohle - Python 2.4.6:
a='Ă˝ á Ă Ă.'
repr(a)
"'\\xc3\\xbd \\xc3\\xb7 \\xc3\\xad \\xc3.'"
a.decode("cp1250")
u'\u0102\u02dd \u0102\xb7 \u0102\xad \u0102.'
print eval(a).decode("cp1250")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<string>", line 1
Ă˝ á Ă Ă.
^
SyntaxError: invalid syntax
No teď už jenom to reverznout z cp1250 na utf8 a to pak už správně
převést na cp1250. jenže necode/decode neumí vzít 2 parametry pro kódování,
tak se to pokusím zřetězit:
a.decode('cp1250')
u'\u0102\u02dd \u0102\xb7 \u0102\xad \u0102.'
a.decode('cp1250').encode('utf8')
'\xc4\x82\xcb\x9d \xc4\x82\xc2\xb7 \xc4\x82\xc2\xad \xc4\x82.'
Sice jsem pokročil, ale je to nějak delší a delší.
----- Původní zpráva ----- Od: "Petr Přikryl" <prikryl na atlas.cz>
Já vidím tohle:
rr = "'\\xc3\\xbd \\xc3\\xb7 \\xc3\\xad \\xc3.'"
a = eval(rr)
a
'\xc3\xbd \xc3\xb7 \xc3\xad \xc3.'
u = a.decode('utf-8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 9:
invalid continuation byte
To rr je okopírované tvoje repr. Pomocí eval() to převedu na hodnotu a.
Pak volám
a.decode('utf-8') a ono to jinými slovy říká, že to není v utf-8.
P.
______________________________________________________________
Od: "Jaroslav Lukesh" <lukesh na seznam.cz>
Komu: Konference PyCZ <python na py.cz>
Datum: 02.05.2012 11:52
Předmět: Re: [python] Unicode/ne-unicode problem
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
_______________________________________________
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
_______________________________________________
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ší část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20120502/24bbf158/attachment.html>
Další informace o konferenci Python