[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