偶然見つけたPythonのソースコードの中に、小さなb次のような文字列の前に:
b"abcdef"
私は知っているu
ユニコード文字列を表す接頭辞とr
生の文字列リテラルのプレフィックス。
b
は、プレフィックスのないプレーンな文字列とまったく同じように見えますが、何の略語であり、どのような種類のソース コードで役立ちますか?
ベストアンサー1
接頭b
辞はbytes
文字列リテラル。
Python 3のソースコードで使用されているのを見ると、この式はbytes
物体、定期的ではないUnicodestr
オブジェクトPython シェルにエコーされたり、リスト、辞書、その他のコンテナ コンテンツの一部として表示されたりする場合は、bytes
この表記法を使用して表現されたオブジェクトが表示されます。
bytes
オブジェクトは基本的に0~255の範囲の整数のシーケンスを含みますが、表現されるとき、Pythonはこれらのバイトを次のように表示します。ASCII コードポイント内容を読みやすくするためです。印刷可能ASCII文字の範囲はエスケープシーケンスとして表示されます(例:\n
、\x82
など)。逆に、ASCII文字とエスケープシーケンスの両方を使用してバイト値を定義することもできます。ASCII値の場合は数値が使用されます(例:b'A'
== b'\x41'
)
bytes
オブジェクトは整数のシーケンスで構成されているためbytes
、リストのように、0 ~ 255 の範囲の値を持つ他の任意の整数のシーケンスからオブジェクトを構築できます。
bytes([72, 101, 108, 108, 111])
インデックス付けすると整数が返されます(ただしスライスすると新しいbytes
値が生成されます。上記の例では、value[0]
が返されます72
が、72は大文字のASCIIコードポイントであるためですvalue[:1]
。b'H'
H)。
bytes
モデルバイナリデータ、 含むエンコードされたテキスト値にテキストが含まれている場合はbytes
、まず正しいコーデックを使用してデコードする必要があります。たとえば、データが UTF-8 としてエンコードされている場合は、次のようstr
にして Unicode 値を取得できます。
strvalue = bytesvalue.decode('utf-8')
逆に、str
オブジェクト内のテキストからbytes
エンコード使用するエンコーディングを決定する必要があります。デフォルトでは UTF-8 が使用されますが、必要なものは使用事例によって大きく異なります。
bytesvalue = strvalue.encode('utf-8')
bytes(strvalue, encoding)
同じことをコンストラクターを使用して行うこともできます。
デコードとエンコードの両方のメソッドは、追加の引数を取ります。エラーの処理方法を指定する。
Python 2 バージョン 2.6 および 2.7 では、文字列リテラルb'..'
構文を使用した文字列リテラルの作成もサポートされており、Python 2 と 3 の両方で動作するコードの作成が容易になります。
bytes
オブジェクトは文字列と同様に不変ですstr
。bytearray()
物体変更可能なバイト値が必要な場合。