[文字コード] UnicodeとUTF-Xの違い
UnicodeとUTF-8, UTF-16, UTF-32の違いに関するメモ.
Unicode
1つひとつの文字に符号位置と呼ばれる整数値をつけて管理している.
UTF-X
UTF-8, UTF-16, UTF-32などはエンコーディング方式と呼ばれるもので, 符号位置の整数値をコンピュータが使用できるようにバイト列に変換する.
検証
Python3によるUnicodeでの名前, 符号位置, 各エンコーディング方式でのバイト列の出力.
import unicodedata import binascii # 名前 print('名前: ' + unicodedata.name('鬱')) # 符号位置 print('符号位置: ' + str(ord('鬱'))) # UTF-8(16進数表記) print('UTF-8: ' + str(binascii.hexlify('鬱'.encode('UTF-8')))) # UTF-16(16進数表記) print('UTF-16: ' + str(binascii.hexlify('鬱'.encode('UTF-16')))) # UTF-16LE(16進数表記) print('UTF-16LE: ' + str(binascii.hexlify('鬱'.encode('UTF-16LE')))) # UTF-16BE(16進数表記) print('UTF-16BE: ' + str(binascii.hexlify('鬱'.encode('UTF-16BE')))) # UTF-32(16進数表記) print('UTF-32: ' + str(binascii.hexlify('鬱'.encode('UTF-32')))) # UTF-32LE(16進数表記) print('UTF-32LE: ' + str(binascii.hexlify('鬱'.encode('UTF-32LE')))) # UTF-32BE(16進数表記) print('UTF-32BE: ' + str(binascii.hexlify('鬱'.encode('UTF-32BE'))))
実行結果:
名前: CJK UNIFIED IDEOGRAPH-9B31 符号位置: 39729 UTF-8: b'e9acb1' UTF-16: b'fffe319b' UTF-16LE: b'319b' UTF-16BE: b'9b31' UTF-32: b'fffe0000319b0000' UTF-32LE: b'319b0000' UTF-32BE: b'00009b31'