[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