[python] Speciální znaky
Petr Prikryl
PrikrylP na skil.cz
Čtvrtek Leden 18 09:16:53 CET 2007
> Jakub Vojacek napsal(a):
> >
> > mám dotaz: Jak řešíte když v programu potřebujete
> > nějaké speciální znaky jako řeckou abecedu či znak
> > pro nekonečno?
MaReK Olšavský
>
> UTF-8 a kod toho znaku :-).
Přesněji řečeno, musí se používat unicode řetězce.
Ty se dají i v ascii zdrojáku zapsat pomocí náhradní
sekvence. Před uvozovky nebo apostrofy se ale musí
uvést malé u. Takže nekonečno se zapíše takto:
s = u'\u221e'
Další problém spočívá v zobrazování nebo ve výstupu
do souboru. Pro zobrazování se musí použít GUI okénka,
která umí zobrazovat Unicode, pro zápis do souboru
se musí konvertovat do správného kódování. Zkus tohle
======================================
# -*- coding: utf-8 -*-
prolog = u'''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Pokus s Unicode</title>
</head>
'''
epilog = u'</html>'
s = u'Příšerně žluťoučký kůň úpěl ďábelské ódy až do \u221e'
f = open('pokus.html', 'w')
f.write(prolog.encode('utf-8'))
f.write(s.encode('utf-8'))
f.write(epilog.encode('utf-8'))
f.close()
======================================
Zdrojový soubor se musí uložit přes editor, který to umí
uložit v kódování UTF-8.
Nebo změň první řádek ve zdrojáku na kódování, které umí
zachytit češtinu a ulož to v tom kódování -- například
pod Windows v kódování windows-1250 (v Pythonu cp1250):
======================================
# -*- coding: cp1250 -*-
prolog = u'''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Pokus s Unicode</title>
</head>
'''
epilog = u'</html>'
s = u'Příšerně žluťoučký kůň úpěl ďábelské ódy až do \u221e'
f = open('pokus.html', 'w')
f.write(prolog.encode('utf-8'))
f.write(s.encode('utf-8'))
f.write(epilog.encode('utf-8'))
f.close()
======================================
V obou případech to vygeneruje stejný soubor pokus.html.
Prohlížeč by s nekonečnem neměl mít problém.
Kódy unicode znaků lze nalézt například přes
http://www.unicode.org/charts/charindex.html
Hledej INFINITY (\u221E). Klikni na číslo a objeví se
část s velkým počtem matematických symbolů.
Přes http://www.unicode.org/charts/ se dostaneš
k řeckým písmenkům.
Nějaký unicoďák by se k tomu ještě mohl vyjádřit ;)
pepr
Další informace o konferenci Python