Čeština v Python 3.x

py30.png

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:

  1. 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.
  2. 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)

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)