pythonソースコードで、次のような文字列の前に小さなbを見つけました。
b"abcdef"
u
Unicode文字列を表すr
プレフィックスと、生の文字列リテラルのプレフィックスについて知っています。
b
プレフィックスのないプレーンな文字列のように見えるので、何の略で、どのようなソースコードが便利ですか?
pythonソースコードで、次のような文字列の前に小さなbを見つけました。
b"abcdef"
u
Unicode文字列を表すr
プレフィックスと、生の文字列リテラルのプレフィックスについて知っています。
b
プレフィックスのないプレーンな文字列のように見えるので、何の略で、どのようなソースコードが便利ですか?
回答:
これはPython3 bytes
リテラルです。このプレフィックスはPython 2.5以前にはありません(2.xのプレーン文字列に相当しますが、3.xのプレーン文字列はu
2.xのプレフィックス付きのリテラルに相当します)。Python 2.6以降では、3.xとの互換性のために、プレーンな文字列と同等です。
b
プレフィックスは意味bytes
の文字列リテラルを。
Python 3のソースコードで使用されている場合、式は通常のUnicode オブジェクトではなくbytes
オブジェクトを作成します。Pythonシェル、またはリスト、辞書、その他のコンテナコンテンツの一部としてエコーされている場合、この表記法を使用して表されているオブジェクトが表示されます。str
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
が、value[:1]
あるb'H'
72は大文字のASCIIコード・ポイントであるとして、Hが)。
bytes
エンコードされたテキストを含むモデルのバイナリデータ。値にテキストが含まれている場合は、まず正しいコーデックを使用してそれをデコードする必要があります。たとえば、データがUTF-8としてエンコードされている場合、次のようにしてUnicode 値を取得できます。bytes
str
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()
オブジェクトを使用します。