str と bytes
python 3 からは、文字列(str
型)は UNICODE として扱われ、日本語なども扱えます。
'abc'
も 3 文字だし、'あいう'
も 3 文字です。そりゃそうですよね。python プログラム中に書くときは、
'あいう'
などと書きます。
ただ、実際にファイルなどに書き込む際は、文字コード(文字符号化方式, encoding)を決めて byte
列に変換して出力します。
UTF-8 とか UTF-16 とか Shift_JIS とか、いろいろあります。
ASCII は、アルファベットや数字は扱えますが、「ひらがな」や「漢字」は扱えない。
UTF-8 は、アルファベットなどについて ASCII と互換性をもたせるように 1-byte で表現し、 「ひらがな」などは複数 bytes 使って表現します。
str
からbytes
の変換はencode()
で可能。encoding
を指定できるが、省略時はutf-8
が利用されるbytes
からstr
への変換はdecode()
で可能。encoding
を指定できるが、省略時はutf-8
が利用されるstr(bytes, encoding)
でもbytes
からstr
への変換可能
s = 'abc'
print(s) # abc
b = s.encode()
print(b) # b'abc'
print(str(b,'utf-8')) # abc
print(b.decode('utf-8')) # abc
s = 'あいう'
print(s) # あいう
b = s.encode()
print(b) # b'\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86'
print(str(b, 'utf-8')) # あいう
print(b.decode('utf-8')) # あいう
ちなみに、bytes の場合、print の際 b'abc'
のように表示され、同様に、
プログラム中に bytes の値を直接表記する際も b'abc'
のように書くことができます。