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を使った開発の幅を広げるためにも、ぜひマスターしておきましょう!