Posted at

Python で学ぶ文字コード

More than 1 year has passed since last update.

Python 2.7 のドキュメントを読んだ学んだことまとめ


Unicode HOWTO — Python 2.7.13 documentation

https://docs.python.org/2/howto/unicode.html

7.8. codecs — Codec registry and base classes — Python 2.7.13 documentation

https://docs.python.org/2/library/codecs.html#encodings-and-unicode



歴史的経緯


1968 年頃

ASCII(American Standard Code for Information Interchange) によって 0-127 の数字が文字に割り当てられていた。

例) a: 97

$ python -V

Python 2.7.10

>>> unichr(97)
u'a'

>>> ord('a')
97

unichr(i) - 2. Built-in Functions — Python 2.7.13 documentation

ord(i) - 2. Built-in Functions — Python 2.7.13 documentation

だがヨーロッパで使われる é やロシアのキリル文字は表せなかった。


1980 年代

8bit (2^8 = 256) のコンピューターが主流になり、128-255 にそれぞれが独自の形式で文字が割り当てていた。

この違いを解消するために Unicode が開発されることになった。


Unicode


定義


The Unicode standard describes how characters are represented by code points.


Character: a

code points: 97 (0x61)


使用する数

当初、Unicode は 16bit (65,536)を使用していた。

現在は 0–1,114,111(0x10ffff) の幅を持っている。


a Unicode string is a sequence of code points, which are numbers from 0 to 0x10ffff.



Encodings


The rules for translating a Unicode string into a sequence of bytes are called an encoding.


>>> 'a'.encode('hex')

'61'


Python コード

$ python -V

Python 2.7.10

>>> s = 'a b c x y z'
>>> s.encode('hex')
'612062206320782079207a'


vim - Insert モード

CTRL-v + u0061a が入力される。


参考

Python Character Mapping Codec cp1252 generated from 'MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT' with gencodec.py.