CSVの日本語が文字化けする・読めないときの直し方|Python

CSVの日本語が文字化けする・読めないときの直し方|Python

記事
IT・テクノロジー
カテゴリ:Python

PythonでCSVを開いたら日本語が崩れる、UnicodeDecodeErrorで止まる。まず、保存時と読込時の文字コードを合わせます。元のCSVは残し、コピーで試しましょう。

止まるか、文字が崩れるか
02_症状を分ける.png

UnicodeDecodeErrorは、指定した文字コードで読めず処理が止まった状態です。文字化けは、読めても「こんにちは」が「縺薙s縺ォ縺。縺ッ」のように崩れる状態。エラーが出ないだけでは、正しく読めたとは限りません。

保存時の文字コードに合わせる
03_文字コードの対応.png

出力元のアプリの保存設定や仕様を確認し、下のencodingを選びます。
・UTF-8:"utf-8"
・BOM付きUTF-8:"utf-8-sig"
・CP932(Windows-31J):"cp932"
utf-8-sigは先頭のBOMを取り除いて読み、BOMなしUTF-8にも使えます。CSVの拡張子だけでは文字コードは分かりません。

コピーしたCSVを読み直す

Python 3を使える環境で、下のコードをread_csv.pyとして保存します。CSVのコピーをinput.csvという名前で同じフォルダへ置き、そのフォルダでpython read_csv.pyを実行してください。

import csv
from pathlib import Path

path = Path(__file__).with_name("input.csv")
with path.open(encoding="utf-8-sig", newline="") as f: rows = list(csv.reader(f))
for row in rows: print(" / ".join(row))

コード確認環境:Python 3.12/Linux

例のCSVが「001,こんにちは」なら、表示は「001 / こんにちは」です。CP932のCSVならencodingを"cp932"へ変更して再実行。番号の001も文字のまま読めます。このコードは表示だけなので、CSVを書き換えません。

まだ直らないとき
04_日本語と番号を確認.png

元データと日本語・番号・件数を照合します。errors="ignore"や"replace"で先へ進めると、文字の欠落や置換を見逃します。文字コードが不明なら、出力元で確認して再取得してください。すでに「?」などへ置き換えて保存した文字は、指定変更だけでは戻せません。

読込後の値は正しく、画面だけ崩れる場合は表示環境の確認が必要です。CSV読込とは分けて調べましょう。

カスタマイズやご要望がある場合は、お気軽にご相談ください。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す