[python] unicode

Petr Prikryl PrikrylP na skil.cz
Pondělí Říjen 31 14:31:49 CET 2005


geon...
> ViNiL napsal(a):
> > 
> > Python lze zkompilovat jak s UCS-2, tak 
> > s UCS-4. Snad vsechny Linuxove
> > distribuce presly k tomu druhemu a doufam, 
> > ze se tak deje i jinde ;-)
> > 
> > Viz sys.maxunicode
> 
> Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit 
> (Intel)] on win32
> Type "copyright", "credits" or "license()" for more information.
> 
>  >>> import sys
>  >>> sys.maxunicode
> 65535
> 
> což je 2**16, 16/8= 2 byty pod mými současnými w2k.

Parametr sys.maxunicode uvádí maximální hodnotu
kódu znaku, jakou umí Python vnitřně uložit. Neříká
asi nic o kódování ve vnějším souboru.

Dvoubajtové znaky budou v drtivé většině případů asi
stačit -- viz dříve zmíněný odkaz:

http://www.unicode.org/standard/principles.html

  "The majority of common-use characters fit into the first
  64K code points, an area of the codespace that is called
  the basic multilingual plane, or BMP for short. There are
  about 6,300 unused code points for future expansion in the
  BMP, plus over 870,000 unused supplementary code points on
  the other planes. More characters are under consideration
  for addition to future versions of the standard."

Soubor používající způsob kódování UTF-16 může obsahovat i znaky
s kódem větším, než 64k. V takovém případě se použijí 4 bajty
na znak. Stejně tak bychom mohli bez ztráty informace
použít UTF-8.

Implementační problém s "čínštinou" nastane tedy jen v případě,
kdy fyzicky spoléháme na to, že jeden znak zabírá v souboru
přesně dva bajty. Bude to problém chybného předpokladu o počtu
bajtů na znak v souboru, nikoliv problém samotného kódování
Unicode.

Konkrétní překlad Pythonu (sys.maxunicode 64k nebo větší)
nic neříká o vnější podobě souborů, ale jen o vnitřním
uložení Unicode znaků. Pokud pro daný lidský jazyk
obecně nestačí dva bajty, pak se prostě použije 
jiný Python. Soubory zůstanou stejné.

Závěr: Není dobré spoléhat na počet bajtů v souboru 
       s unicode obsahem.

pepr



Další informace o konferenci Python