5.2.12str型⇔bytes型を変換する

構文 encodeメソッド
txt.encode(encoding="utf-8, errors="strict)
txt :任意の文字列
encoding :変換に利用する文字エンコーディング(shift-jis, euc-jp, iso-2022-jpなど)
errors :エラー時の挙動(設定可能な値は後述)

 data = 'こんにちは'
 encoded = data.encode('sjis')
 print(encoded)
b'\x82\xb1\x82\xf1\x82\xc9\x82\xbf\x82\xcd'
  1. 最初の行data = 'こんにちは'は、'こんにちは'という文字列をdataという名前の変数に代入しています。

  2. 次の行encoded = data.encode('sjis')では、'こんにちは'という文字列をShift JIS('sjis')というエンコーディングを使ってバイト列に変換しています。Shift JISは、日本語の文字を表現するための一般的なエンコーディングの一つです。

  3. 最後の行print(encoded)では、エンコードされたバイト列(つまり、エンコードされた'こんにちは')を出力します。バイト列は、バイト(0から255までの整数)のシーケンスで、エンコードされた文字列は通常人間が直接読むことはできません。

結果として得られる出力は、Shift JISエンコーディングを使用して'こんにちは'をエンコードした結果のバイト列です。



バイト列とは?

バイト列(byte sequence)とは、一連のバイト(0から255までの整数)のことを指します。プログラミングにおけるバイトは、通常、8ビットのデータを表します。つまり、256の異なる値を持つことができます。

バイト列は、特にバイナリデータ(テキストデータではないデータ、例えば画像や音声ファイルなど)を扱うときによく使われます。このようなデータは、特定のエンコーディングでテキストとして解釈することなく、生のバイトとして扱われます。

Pythonでは、バイト列はbytesオブジェクトとして表されます。バイト列を作成するためには、文字列に対してエンコードメソッド(encode())を使用するか、bytes()コンストラクタを直接使用します。

例えば、次のコードは、文字列をUTF-8エンコーディングでバイト列に変換します:

python
s = "こんにちは" b = s.encode("utf-8") print(b)

このコードは、次のようなバイト列を出力します:

bash
b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'

ここで、\xe3\x81\x93などのエスケープシーケンスは、各バイトの16進数表現を示しています。



構文decondeメソッド
bs.decode(encoding="utf-8", errors="strict")
bs :任意のバイト列
encoding :変換に利用する文字エンコーディング
errors :エラー時の挙動(設定可能な値は後述)

print(encoded.decode('sjis'))
こんにちは

decodeメソッドは、バイト列(byte sequence)を文字列に変換するために使用されます。文字列への変換には特定の文字エンコーディングが必要です。これは、エンコーディングされたバイト列から元の文字列を復元するための「辞書」のようなものです。

先ほどの例で、文字列 'こんにちは' を 'sjis'(Shift_JIS)というエンコーディングでエンコードした結果を encoded としました。この encoded はバイト列で、人が直接読むことはできません。

次に、そのバイト列 encoded をデコードすることで、元の文字列 'こんにちは' を取り戻します。ここで重要なのは、正確に文字列をデコードするためには、エンコード時に使ったのと同じエンコーディング(この場合 'sjis')を指定する必要があるということです。

以下にそれを示すPythonのコードを示します:

python
data = 'こんにちは' encoded = data.encode('sjis') # バイト列にエンコード decoded = encoded.decode('sjis') # バイト列をデコードして文字列に戻す print(decoded) # 'こんにちは' と表示されます

上記のコードは、文字列 'こんにちは' をエンコードしてバイト列に変換し、そのバイト列をデコードして元の文字列に戻す、という一連の流れを示しています。


str型は人間が理解できる言語

bytes型は人間が理解できる言語をパソコンが理解できる言語に変換するもののようです。