新しいフォルダー(1)

メモです。よろしくおねがいします。

[文字コード] UnicodeとUTF-Xの違い

UnicodeUTF-8, UTF-16, UTF-32の違いに関するメモ.

 

Unicode

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'