Č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)