Pythonでは、bytesリテラルは文字列リテラルと同じように定義されますが、プレフィックスにbが付きます。これはPython 2.5では常に構文エラーとなりますが、Python 2.6ではbytes型と共に導入されました。
# 文字列
s = 'abcd'
# bytesリテラル
b = b'abcd'
bytesリテラルは、ASCII文字のみが許可され、127より大きい文字値は適切なエスケープシーケンスを使用して指定する必要があります。
また、Pythonではencodeとdecodeメソッドを使って文字列とバイト列の相互変換が可能です。
# 文字列をバイト列に変換
byte_str = 'abcd'.encode() # b'abcd'
# バイト列を文字列に変換
str_byte = b'abcd'.decode() # 'abcd'
これらのメソッドのデフォルトのエンコーディングはencoding='utf-8'です。
# 文字列をバイト列に変換(エンコーディング指定)
byte_str = 'abcd'.encode(encoding='utf-8') # b'abcd'
# バイト列を文字列に変換(エンコーディング指定)
str_byte = 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のbytesリテラルは文字列とバイト列の相互変換に役立つ機能であり、プログラミングにおいて重要な概念の一つです。.