1. はじめに
Pythonでは、文字列(str型)とバイト列(bytes型)を使い分ける場面が多くあります。特に、ファイル操作やネットワーク通信、外部APIとのやりとりなどでは、バイト列の扱いが必須です。
本記事では、「Python|文字列とバイト列の変換と違い」というテーマで、両者の違いを基礎から解説し、変換方法・注意点・実務的な使い方まで丁寧に紹介します。
2. Pythonの文字列(str)とバイト列(bytes)の基本
2-1. 文字列(str型)とは?
Pythonの文字列(str型)は、人が読むためのテキストデータを扱う型です。内部的にはUnicodeで管理され、多言語対応しています。
text = "こんにちは"
print(type(text)) # str型
実行結果:
<class 'str'>
2-2. バイト列(bytes型)とは?
バイト列(bytes型)は、コンピュータ内部のデータ表現であり、ファイルの読み書きや通信データの送受信など、エンコードされた状態で扱います。
b = b"Hello"
print(type(b)) # bytes型
実行結果:
<class 'bytes'>
2-3. 文字列とバイト列の違いまとめ
型 | 内容 | 用途 |
---|---|---|
str | Unicode文字列 | 画面表示、入力、テキスト処理 |
bytes | バイナリデータ(エンコード済) | ファイル、通信、暗号処理 |
3. Pythonで文字列とバイト列を相互変換する方法
3-1. 文字列 → バイト列(encode)
encode()メソッドを使って、文字列をバイト列に変換します。
text = "こんにちは"
byte_data = text.encode("utf-8")
print(byte_data)
print(type(byte_data))
実行結果:
b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
<class 'bytes'>
3-2. バイト列 → 文字列(decode)
decode()メソッドを使って、バイト列を元の文字列に戻します。
byte_data = b'\xe3\x81\x93\xe3\x82\x93\xe3\x81\xab\xe3\x81\xa1\xe3\x81\xaf'
text = byte_data.decode("utf-8")
print(text)
print(type(text))
実行結果:
こんにちは
<class 'str'>
4. よくある使い方・応用例
4-1. ファイル保存時にバイト列を使う
テキストファイルをバイナリモードで保存する場合、str型をbytes型に変換して書き込みます。
text = "Pythonでバイト列を扱う"
with open("example.txt", "wb") as f:
f.write(text.encode("utf-8"))
4-2. 通信・APIとの連携で使う
APIに送信するデータをJSONとして文字列で作り、バイト列にして送信するケースが多くあります。
import json
import urllib.request
data = json.dumps({"name": "taro"}).encode("utf-8") # str → bytes
req = urllib.request.Request(
url="http://example.com/api",
data=data,
headers={"Content-Type": "application/json"}
)
5. 注意点・エラー対策
5-1. encode/decodeのエンコーディング指定
文字コードを間違えると、UnicodeDecodeError や UnicodeEncodeError が発生します。
# 間違ったエンコーディング
text = "こんにちは"
try:
wrong = text.encode("shift_jis")
print(wrong.decode("utf-8")) # エラー発生
except UnicodeDecodeError as e:
print("デコードエラー:", e)
実行結果:
デコードエラー: 'utf-8' codec can't decode byte 0x82 in position 0: invalid start byte
5-2. strとbytesの混在に注意
Pythonでは、strとbytesを直接結合しようとするとエラーになります。明示的な変換が必要です。
text = "Python"
data = b"Bytes"
try:
result = text + data # TypeErrorが発生
except TypeError as e:
print("型エラー:", e)
実行結果:
型エラー: can only concatenate str (not "bytes") to str
6. まとめ
- str型は人が読む文字列、bytes型は機械が扱うバイナリデータ。
encode()
でstr→bytes、decode()
でbytes→strに変換可能。- ファイル書き込みやAPI通信ではバイト列が重要な役割を果たす。
- エンコーディングミスや型の混在に注意。
Pythonにおいて、文字列とバイト列の理解はデータ処理の基礎です。特にファイルやネットワークを扱うプログラムでは欠かせない知識なので、実際に手を動かして確かめることが習得の近道です。
実務でも、APIレスポンスの解析やCSVファイルの処理などで頻出する概念なので、この記事を参考にしっかりマスターしておきましょう!