Python|文字列とバイト列の変換と違い

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のエンコーディング指定

文字コードを間違えると、UnicodeDecodeErrorUnicodeEncodeError が発生します。

# 間違ったエンコーディング
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ファイルの処理などで頻出する概念なので、この記事を参考にしっかりマスターしておきましょう!

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