LoginSignup
65
63

More than 5 years have passed since last update.

Unicode と UTF-8 (とその仲間たち) のざっくりした違い

Last updated at Posted at 2017-06-01

Unicode and UTF-8.png

Unicode とは

文字集合のこと。ひとつひとつの文字に 符号位置 と呼ばれる整数値を付けて管理している。

UTF-8, UTF-16, UTF-32 とは

文字符号化方式 のこと。符号位置の整数値をコンピュータが使用できるようにバイト列に変換する。

エンディアンとは

複数のバイトからなるデータをメモリに記録する際やネットワークで送受信する際などに、バイトを並べる順番のこと。バイトオーダ と呼ぶこともある。ビッグエンディアンでは上位側から、リトルエンディアンでは下位側から並べる。

エンディアン.png

検証用コード

この記事を書くにあたって Python で検証したときのコードです。

In [1]: import unicodedata

In [2]: import binascii

In [3]: unicodedata.name('鬱') # 名前を調べる
Out[3]: 'CJK UNIFIED IDEOGRAPH-9B31'

In [4]: ord('鬱') # 符号位置を調べる
Out[4]: 39729

In [5]: binascii.hexlify('鬱'.encode('UTF-8')) # UTF-8 でバイト列にエンコードしてから 16 進数表現に変換する
Out[5]: b'e9acb1'

In [6]: binascii.hexlify('鬱'.encode('UTF-16'))
Out[6]: b'fffe319b'

In [7]: binascii.hexlify('鬱'.encode('UTF-16LE'))
Out[7]: b'319b'

In [8]: binascii.hexlify('鬱'.encode('UTF-16BE'))
Out[8]: b'9b31'

In [9]: binascii.hexlify('鬱'.encode('UTF-32'))
Out[9]: b'fffe0000319b0000'

In [10]: binascii.hexlify('鬱'.encode('UTF-32LE'))
Out[10]: b'319b0000'

In [11]: binascii.hexlify('鬱'.encode('UTF-32BE'))
Out[11]: b'00009b31'

In [12]: binascii.hexlify('快感'.encode('UTF-16'))
Out[12]: b'fffeeb5f1f61'

In [13]: binascii.hexlify('快感'.encode('UTF-16LE'))
Out[13]: b'eb5f1f61'

In [14]: binascii.hexlify('快感'.encode('UTF-16BE'))
Out[14]: b'5feb611f'

65
63
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
65
63