| 1 2 3 4 5 6 7 | ||
|
Editor: mol
Time: 2012/04/24 22:11:37 GMT+2 |
||
| Note: Řazení | ||
added: Komentáře --------------------------------- changed: -import locale -locale.setlocale(locale.LC_ALL,'czech') -seznam.sort(key=locale.strxfrm) :: import locale locale.setlocale(locale.LC_ALL,'czech') seznam.sort(key=locale.strxfrm)
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í.
Pro správné fungování češtiny v samotném programu je třeba dodržet 2 hlavní zásady:
veta="Žluťoučký kůň pěl ďábelské ódy." print (veta)
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.
import sys print (sys.getfilesystemencoding()) # kodování souborového systému
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 .....
import sys print (sys.getdefaultencoding())
import locale
print ("řčššě".upper())
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)
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)
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)
Unicode HOWTO: http://docs.python.org/3.0/howto/unicode.html