[python] Tisk unicode řetězce a tisk seznamu unicode řetězců

Petr Přikryl prikryl na atlas.cz
Úterý Červen 7 13:23:34 CEST 2011


Jak píše Tomáš. Jakmile si začneš s texty s diakritikou, vždycky je lepší
používat Unicode řetězce (i když je otrava psát před literály u a dávat
si na to pořád pozor. Z textových souborů v UTF-8 bys to měl načítat
přes modul codecs (codecs.open(filename, 'r', 'utf-8') -- aspoň si zvykneš
na to, že k textovému souboru vždycky patří i údaj o kódování.  V Pythonu 3
už je to nutnost.

K tomu prvnímu je to tak, jak píše Petr Messner. Funkce repr() (nebo metoda,
kterou tato funkce volá) má za úkol vytvořit textovou reprezentaci, která (když
se vloží do zrojového textu) zajistí vytvoření objektu se stejnou hodnotou. A protože
řetězce nebo unicode řetězce mohou být v souborech uloženy v různém kódování
a podle toho by to mělo vypadat pokaždé jinak, vygeneruje tvar, který používá
jen ASCII znaky -- i za cenu, že to není čitelné.

Doporučuju si přečíst Kapitolu 4. Řetězce v "Ponořme se do Pythonu 3"
http://diveintopython3.py.cz/strings.html

Problém posloupností bajtů vs. abstraktních řetězců je tam vysvětlen
celkem stručně.

Měj se fajn,
    Petr
 
 ______________________________________________________________
 > Od: "Tomáš Drenčák"
 > Komu: Konference PyCZ 
 > Datum: 07.06.2011 10:33
 > Předmět: Re: [python]Tisk unicode řetězce a tisk seznamu unicode řetězců
 >
Neviem to teraz overit, no myslim ze pred unicode string ma ist u, teda takto:
seznam = [ u"žluťoučký kůň", u"úpěl ďábelské ódy" ]


2011/6/7 David Rohlede

Ahoj,
 
 neví někdo, proč se následující příklad chová následovně?
 
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 
 seznam = [ "žluťoučký kůň", "úpěl ďábelské ódy" ]
 
 print seznam
 
 for i in seznam:
    print i
 
 
 ['xc5xbeluxc5xa5ouxc4x8dkxc3xbd kxc5xafxc5x88', 'xc3xbap
 xc4x9bl xc4x8fxc3xa1belskxc3xa9 xc3xb3dy']
 žluťoučký kůň
 úpěl ďábelské ódy
 
 Tj. jednou to vytiskne dost nečitelně a podruhé správně čitelně (oboje
 je asi správně)?
 
 zkoušel jsem třeba i
 
 print [i.encode("utf-8") for i in seznam]
 
 ale taky nic.
 
 Dík
 
 David


------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20110607/db1fdf80/attachment.html>


Další informace o konferenci Python