Pythonでは、バイト列と文字列の相互変換が可能です。これは、エンコーディングとデコーディングを使用して行います。
'abcd'.encode() # b'abcd'
b'abcd'.decode() # 'abcd'
これらのメソッドのデフォルトのエンコーディングは encoding='utf-8'
です。
'abcd'.encode(encoding='utf-8') # b'abcd'
b'abcd'.decode(encoding='utf-8') # 'abcd'
不正なバイト列に遭遇した場合、デフォルトのふるまいはエラーになります。
b'\\xff'.decode() # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
代替文字に置き換える場合、 errors='replace'
を指定します。
b'\\xff'.decode('utf-8', 'replace') # '�'
また、Python 3.5 で導入された hex
関数を使えば、16進数文字列に変換されます。
b'\\x61\\x62\\x63\\x64'.hex() # '61626364'
'\\x61\\x62\\x63\\x64'.encode('utf-8', 'replace').hex() # '61626364'
以上のように、Pythonではバイト列と文字列の相互変換、エンコーディング、デコーディング、16進数表記など、様々な操作が可能です。これらの知識は、バイナリデータの操作やエンコーディングの理解に役立ちます。