Python|文字列をバイト列に変換する

1. はじめに

Pythonでプログラミングをしていると、「文字列をバイト列に変換したい」という場面に出くわすことがあります。
たとえば、ファイルのバイナリ処理ネットワーク通信暗号化処理などでは、文字列をそのまま扱うのではなく、バイト(bytes)形式に変換してから扱う必要があります。

本記事では、Pythonで文字列をバイト列に変換する方法について、基礎から応用まで丁寧に解説します。具体的なコード例や実行結果も載せているので、実際に手を動かしながら学ぶことができます。

 

2. Pythonで文字列をバイト列に変換する基本

2.1 バイト列(bytes)とは?

Pythonでは、str型の文字列とbytes型のバイト列を明確に区別します。
バイト列は「エンコードされたデータ」であり、主にコンピュータ間の通信やバイナリファイルとのやりとりに使われます。

2.2 encode()メソッドを使って変換する

# 文字列をバイト列に変換する
text = "こんにちは"
byte_data = text.encode("utf-8")

# 結果を表示
print(byte_data)

実行結果:

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

2.3 エンコーディングの指定

encode()メソッドでは、エンコーディング方式(例:utf-8, shift_jis, euc-jpなど)を指定することができます。

text = "Pythonで文字列をバイトに"
byte_utf8 = text.encode("utf-8")
byte_sjis = text.encode("shift_jis")

print(byte_utf8)
print(byte_sjis)

実行結果:

b'Python\xe3\x81\xa7\xe6\x96\x87\xe5\xad\x97\xe5\x88\x97\xe3\x82\x92\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe3\x81\xab'
b'Python\x82\xc5\x95\xb6\x8e\x9a\x97\xcd\x82\xf0\x83\x74\x83\x42\x83g\x82\xc9'

 

3. よくある使い方・応用例

3.1 バイナリファイルへの書き込み

文字列をバイト列に変換することで、wb(バイナリ書き込み)モードでファイルに出力できます。

text = "バイナリファイルに書き込む"
with open("output.bin", "wb") as f:
    f.write(text.encode("utf-8"))

実行結果:

(output.bin に UTF-8 バイト列が書き込まれます)

3.2 ネットワーク通信での使用例

ソケット通信では、文字列を送信する前に必ずバイト列に変換する必要があります。

import socket

# サーバーへ送信するメッセージ
message = "Hello, Server!"

# ソケット作成と送信(例)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("127.0.0.1", 8080))
    s.sendall(message.encode("utf-8"))  # 文字列→バイトに変換

実行結果:

(サーバーにバイト列で "Hello, Server!" を送信)

3.3 JSON文字列をバイト列にしてAPIに送信

API通信時に、requestsモジュールでバイト列として送信するケースもあります。

import requests
import json

data = {"name": "Alice", "age": 25}
json_bytes = json.dumps(data).encode("utf-8")

response = requests.post("https://example.com/api", data=json_bytes)
print(response.status_code)

実行結果:

200

 

4. 注意点・エラー対策

4.1 encode()を使えない型に注意

encode()文字列(str)型でなければ使用できません。数値やリストに使おうとするとエラーになります。

# 数値に対してencodeするとエラーになる
num = 123
# num.encode("utf-8")  # AttributeError

対処法: str()で文字列に変換してからencode()を使う

byte_num = str(num).encode("utf-8")
print(byte_num)

実行結果:

b'123'

4.2 エンコードに失敗するケース

特殊文字や一部の記号は、指定したエンコーディングによってはエラーになります。

text = "こんにちは🌟"

# shift_jisには絵文字が対応していない
# text.encode("shift_jis")  # UnicodeEncodeError

対策: 基本的には utf-8 を使うことでほとんどの文字を安全に扱えます。

 

5. まとめ

この記事では、Pythonで文字列をバイト列に変換する方法について解説しました。主に使うのはencode()メソッドで、以下のポイントを押さえておきましょう。

  • 文字列からバイト列への変換には encode() を使う
  • ネットワーク通信やバイナリファイルで必須の操作
  • 文字列以外には使えない点や、エンコーディングの指定に注意

このテクニックは、ファイル処理やAPI通信の現場でもよく使われる実務的なスキルです。Pythonを使った開発の幅を広げるためにも、ぜひマスターしておきましょう!

タイトルとURLをコピーしました