Edit detail for UnicodeZnaky revision 2 of 1

2
Editor: geon
Time: 2011/10/10 21:20:12 GMT+2
Note:

changed:
-
Unicode znaky
===============

.. image:: py25.png
   :align: right

Dotaz
--------
Jak řešíte když v programu potřebujete nějaké speciální znaky jako řeckou abecedu či znak pro nekonečno?

Odpověď
--------

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'

Přehled unicode znaků
........................

| 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.

Výstup na obrazovku
................... 

Pro zobrazování se musí použít GUI okénko, který umí zobrazovat Unicode. Pro vyzkoušení můžeš použít IDLE::

 # -*- coding: utf-8 -*-
 s = u'Příšerně žluťoučký kůň úpěl ďábelské ódy až do \u221e'
 print s

 
Výstup do souboru
................
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.



Unicode znaky

py25.png

Dotaz

Jak řešíte když v programu potřebujete nějaké speciální znaky jako řeckou abecedu či znak pro nekonečno?

Odpověď

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'

Přehled unicode znaků

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.

Výstup na obrazovku

Pro zobrazování se musí použít GUI okénko, který umí zobrazovat Unicode. Pro vyzkoušení můžeš použít IDLE:

# -*- coding: utf-8 -*-
s = u'Příšerně žluťoučký kůň úpěl ďábelské ódy až do \u221e'
print s

Výstup do souboru

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.