[python] Problém s českými znaky v cgi scriptu

Petr Přikryl prikryl na atlas.cz
Úterý Únor 28 22:26:29 CET 2012


Tomáš Kácel napsal...
>[...] Myslel jsem, že python3 funguje na utf-8 a neměl by mít s
>čekými znaky problém, stejně tak prohlížeč je nastaven na utf-8.

Python 3 pracuje s unicode řetězci. UTF-8 je jedno z možných
kódování unicode řetězců, když je potřeba je za fyzicky zaznamenat
a nepracovat s nimi jako s posloupnostmi znaků v abstraktním 
smyslu. To znamená, že před odeslání mimo vnitřní paměť
pythonovského procesu musí dojít k převodu na posloupnost
bajtů (například metodou .encode()). Funkce print() je ale napojená
na výstupní stream (standardně sys.stdout), který rovněž používá 
nějaké kódování řetězců (v závislosti na OS a jeho konfiguraci).
Funkce print() se ale sama snaží převést unicode řetězec do 
onoho (skrytého) výstupního kódování.

Z těchto důvodů není ke generování výstupního HTML souboru
vhodné používat funkci print(). Lepší je otevřít výstupní textový
soubor f pro kódování UTF-8 a zapisovat do něj metodou 
f.write(s)

Doporučuji si přečíst http://diveintopython3.py.cz/strings.html
a http://diveintopython3.py.cz/files.html

P.


Další informace o konferenci Python