[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