pythonソースコードでつまずいたのは、次のような文字列の前に小さなbがあることです。
b"abcdef"
Unicode文字列を表すu
プレフィックスと、生の文字列リテラルのr
プレフィックスについて知っています。
b
は何を表し、どの種類のソースコードで有用なのですか?プレフィックスのないプレーンな文字列とまったく同じように見えるためです。
これはPython3 bytes
リテラル です。このプレフィックスはPython 2.5以前では存在しません(2.xのプレーンストリングに相当しますが、3.xのプレーンストリングはu
のリテラルに相当します2.xのプレフィックス)Python 2.6+では、プレーン文字列 .xとの互換性のため と同等です。
b
プレフィックスは bytes
文字列リテラル を意味します。
Python 3ソースコードで使用される場合、式は bytes
オブジェクト を作成します。通常の nicode str
object 。Python Shellまたはリスト、dict、または他のコンテナの内容の一部としてエコー表示される場合、bytes
オブジェクトが表示されます。この表記を使用して表されます。
bytes
オブジェクトには基本的に0〜255の範囲の整数のシーケンスが含まれますが、表現される場合、PythonはこれらのバイトをASCII printableの範囲外のすべてのバイトASCII文字はエスケープシーケンスとして表示されます(例:\n
、\x82
など)。逆に、ASCII文字とエスケープシーケンスの両方を使用して、バイト値を定義できます。ASCII値の値は使用済み(例_b'A'
== b'\x41'
)
bytes
オブジェクトは整数のシーケンスで構成されるため、リストのように0〜255の範囲の値を持つ整数の他のシーケンスからbytes
オブジェクトを構築できます。
bytes([72, 101, 108, 108, 111])
インデックスを作成すると、整数が返されます(ただし、スライスすると新しいbytes
値が生成されます。上記の例では、value[1]
は101
を返しますが、72はASCIIコードであるため、value[:1]
はb'H'
です大文字のポイント[〜#〜] h [〜#〜])。
bytes
modelバイナリデータ、エンコードされたテキストを含む。 bytes
値にテキストが含まれている場合は、正しいコーデックを使用して最初にデコードする必要があります。たとえば、データがUTF-8としてエンコードされている場合、以下を使用してUnicode str
値を取得できます。
strvalue = bytesvalue.decode('utf-8')
逆に、str
オブジェクトのテキストからbytes
に移動するには、encodeが必要です。使用するエンコーディングを決定する必要があります。デフォルトではUTF-8を使用しますが、必要なものはユースケースに大きく依存します。
bytesvalue = strvalue.encode('utf-8')
コンストラクタbytes(strvalue, encoding)
を使用して同じことを行うこともできます。
デコードとエンコードの両方のメソッドは エラーの処理方法を指定 に追加の引数を取ります。
Python 2バージョン2.6および2.7は、b'..'
文字列リテラル構文を使用した文字列リテラルの作成もサポートしており、Python 2と3の両方で機能するコードを容易にします。
bytes
文字列がそうであるように、str
オブジェクトは不変です。可変バイト値が必要な場合は、 bytearray()
object を使用します。