1. はじめに
Pythonでテキストファイルを扱う際、文字化けや読み込みエラーに悩まされたことはありませんか?
この記事では、「Python|ファイルの文字コードを変換する」というテーマで、文字コード変換の基本から応用まで丁寧に解説します。
例えば、Shift_JISで書かれたファイルをUTF-8に変換する、あるいはその逆など、Pythonでは数行のコードで簡単に実現できます。本記事では、初心者でも理解しやすいように、具体的なコードと実行結果を交えて紹介します。
実務でも文字コードの不一致による不具合は頻出するため、この記事を読むことでエンジニアとしての実践力も高まります。
2. Pythonでの文字コード変換の基本
2-1. 文字コードとは?
文字コード(エンコーディング)とは、文字をバイト列としてコンピュータに保存・伝達するためのルールです。
代表的な文字コードには以下のようなものがあります:
- UTF-8:多言語対応の汎用的なエンコーディング。Webでも主流。
- Shift_JIS:Windows環境や古い日本語ファイルで使用されることが多い。
- EUC-JP:UNIX環境などでかつてよく使われた。
2-2. Pythonでの文字コード変換の基本構文
Pythonでは、テキストファイルを別の文字コードに変換するには、次のような手順をとります。
- 元ファイルを指定されたエンコーディングで読み込む
- 読み込んだ内容を別のエンコーディングで新規保存する
以下はShift_JISからUTF-8に変換するシンプルな例です。
# Shift_JIS → UTF-8へ変換する例
input_file = 'input_sjis.txt'
output_file = 'output_utf8.txt'
# Shift_JISで読み込み、UTF-8で書き出す
with open(input_file, 'r', encoding='shift_jis') as f_in:
content = f_in.read()
with open(output_file, 'w', encoding='utf-8') as f_out:
f_out.write(content)
実行結果:
output_utf8.txt が UTF-8 で保存されます(内容は同一)
3. よくある使い方・応用例
3-1. ディレクトリ内のファイルを一括変換
複数ファイルを一気に変換したいケースも多いです。以下は指定フォルダ内のすべての.txtファイルをShift_JISからUTF-8へ一括変換するコードです。
import os
import glob
input_dir = 'sjis_files'
output_dir = 'utf8_files'
os.makedirs(output_dir, exist_ok=True)
for filepath in glob.glob(os.path.join(input_dir, '*.txt')):
filename = os.path.basename(filepath)
output_path = os.path.join(output_dir, filename)
with open(filepath, 'r', encoding='shift_jis') as f_in:
content = f_in.read()
with open(output_path, 'w', encoding='utf-8') as f_out:
f_out.write(content)
実行結果:
sjis_files/内の.txtファイルがすべてutf8_files/にUTF-8で保存される
3-2. chardetでエンコーディングを自動判定して変換
文字コードが不明なファイルを扱う場合は、chardet
ライブラリが便利です。以下は自動判定してUTF-8に変換する例です。
※chardetのインストールが必要です:pip install chardet
import chardet
input_file = 'unknown_encoding.txt'
output_file = 'converted_utf8.txt'
# バイナリで読み込んでエンコーディングを判定
with open(input_file, 'rb') as f:
raw_data = f.read()
result = chardet.detect(raw_data)
detected_encoding = result['encoding']
# 判定されたエンコーディングでデコードして保存
text = raw_data.decode(detected_encoding)
with open(output_file, 'w', encoding='utf-8') as f_out:
f_out.write(text)
実行結果:
unknown_encoding.txt の文字コードが自動判定され、UTF-8で保存されます
4. 注意点・エラー対策
4-1. UnicodeDecodeErrorの対処
指定した文字コードと実際のファイルのエンコーディングが異なる場合、UnicodeDecodeError
が発生します。
このエラーを防ぐには:
- 事前に
chardet
でエンコーディングを推定する - try-exceptでエラーハンドリングする
4-2. 保存時の文字化け対策
変換後のファイルを別のアプリで開いたときに文字化けする場合、対象アプリがUTF-8を正しく認識していない可能性があります。その場合はBOM付きUTF-8で保存する方法もあります。
# BOM付きUTF-8で保存する例
with open('output_bom_utf8.txt', 'w', encoding='utf-8-sig') as f:
f.write(content)
実行結果:
output_bom_utf8.txt が BOM付きUTF-8 で保存されます
5. まとめ
本記事では「Python|ファイルの文字コードを変換する」というテーマで、基本の使い方から応用例、注意点まで解説しました。
- Pythonでは簡単に文字コード変換ができる
- 大量ファイルの一括変換や自動判定も可能
- 文字化け対策やエラー回避の方法も知っておくと安心
文字コードの違いは地味ながらトラブルの元になることが多いです。今回紹介した方法を使えば、実務でも学習でもスムーズに対応できるでしょう。
ちょっとした文字コードの変換ができるだけで、扱えるデータの幅がぐっと広がります。 ぜひ習得しておきたい基本テクニックのひとつです。