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 <luk...@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" <prik...@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" <luk...@seznam.cz> >> Komu: Konference PyCZ <python@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" <prik...@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" <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<http://www.py.cz/mailman/listinfo/python> >>> >>> ______________________________**_________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/**listinfo/python<http://www.py.cz/mailman/listinfo/python> >> >> ______________________________**_________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/**listinfo/python<http://www.py.cz/mailman/listinfo/python> >> >> ______________________________**_________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/**listinfo/python<http://www.py.cz/mailman/listinfo/python> > ______________________________**_________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/**listinfo/python<http://www.py.cz/mailman/listinfo/python> >
_______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python