Čeština v Python 3.x
Obsah
Bylo zcela změněn přístup Python k unicode znakům. Zmizela povinné u"" před řetězci, nyní je u"" všechno. Práce s národními abecedami je velmi průhledná a funkční.
Kódování vlastního textu programu
Pro správné fungování češtiny v samotném programu je třeba dodržet 2 hlavní zásady:
- Na první řádce uvést pythonovskou definici kódování, tedy např.: # -- coding: utf-8 --. Je silně doporučováno používat kodování utf8. Toto kodování je nyní defaultní pro všechny zdrojové soubory Pythonu. Dokonce se ani nemusí nemusí na první řádce uvádět - pokud není kodování nadeklarováno předpokládá se automaticky utf-8.
- V tom stejném kodování to uložit - například v PSPadu navolit menu Formát - UTF-8 a uložit
veta="Žluťoučký kůň pěl ďábelské ódy." print (veta)
Kódování vstupů
Máte-li ve svém programu žádost na vstup od uživatele raw_input(), je hodnota vrácena v kódování, které získáte příkazem:
import sys print (sys.stdin.encoding)
Standardně pod Windows se jedná o cp852, pod Linuxem ...
Používáte-li jakékoliv GUI a žádáte uživatele o vstup, bude kódování s největší pravděpodobností utf-8. Jinými slovy u GUI aplikací neplatí sys.stdin.encoding.
Kódování názvů souborů a adresářů
import sys print (sys.getfilesystemencoding()) # kodování souborového systému
Kódování obsahu souborů
Platí, že se nedá "přesně určit", "automaticky detekovat", v jakém kódování, je ten který text. Dá se to "odhadnout" - umí to např. unixový program file a enca. Tyto programy se dají najít i pro Windows, ale je problém je pod Windows rozchodit (kompilace).
Nejjistější zůstává určovat kódování přesně a ručně - tedy třeba u textových editorů nechat uživatele, ať si zvolí sám, nebo u přijímaných dat si nechávat posílat i kódování.
Výjimku tvoří kódování textu v utf-8, kde platí .... doplnit .....
Kódování defaultencoding
import sys print (sys.getdefaultencoding())
Malá písmena na velká (po česku)
import locale print ("řčššě".upper())
Řazení (po česku)
seznam=["žízeň", "zábava", "údy", "uzel", "chlap", "čumil", "důkaz", "civil", "řetěz", "rozum", "ábel", "atom", "óda", "ovar"] seznam.sort() for slovo in seznam: print (slovo)
Převod mezi různými znakovými sadami
Například před z 1250 do utf8:
inFile=open("cp1250.txt","r",encoding="cp1250") outFile=open("utf8.txt","w",encoding="utf-8") for i in inFile.read(): outFile.write(i) inFile.close() outFile.close()
nebo i takto moderněji:
with open("cp1250.txt","r",encoding="cp1250") as inFile: with open("utf8.txt","w",encoding="utf-8") as outFile: for i in inFile.read(): outFile.write(i)
Odstranění diakritiky
import unicodedata line="Žluťoučký kůň pěl Ďábelské ody" line = unicodedata.normalize('NFKD', line) output = '' for c in line: if not unicodedata.combining(c): output += c print (output)
Záložky, Oblíbené
Unicode HOWTO: http://docs.python.org/3.0/howto/unicode.html
Komentáře
Řazení --mol, Tue, 24 Apr 2012 22:08:37 +0200 reply
Já jsem pro správné řazení pod Windows (Py 3.2.3 64bit) musel udělat:
import locale locale.setlocale(locale.LC_ALL,'czech') seznam.sort(key=locale.strxfrm)