CSVの文字化けを修正・変換する方法|Google Colab+Pythonで自動化

Python・データ処理

「取引先から届いたCSVを開いたら、商品名が文字化けして読めない。」

そんなことはありませんか?

ECの商品マスターや売上データなど、複数のシステムからCSVを受け取っていると、

  • 日本語の商品名が文字化けする
  • CSVを読み込もうとするとエラーが出る
  • 同じCSVでも、開くソフトによって表示が違う
  • 毎回文字コードを調べて保存し直している

といった問題が起きることがあります。

原因の1つは、CSVファイルの文字コードと、読み込む際に使用する文字コードが一致していないことです。

この記事では、Google ColabとPythonを使って、CSVを正しい文字コードで読み込み、別の文字コードへ変換する方法を紹介します。

今回は実際に、

  • 文字コードの異なるCSVを3種類作成
  • UTF-8・CP932形式のCSVを正常に読み込み
  • 文字コードを間違えた場合のエラーを再現
  • CP932からUTF-8 BOM付きCSVへ変換
  • 変換前後のデータ一致を確認
  • Googleスプレッドシートで正常に読み込めることを確認

まで動作確認しました。

PythonをPCへインストールする必要はありません。

「CSVを開くたびに文字化けを調べたり、手作業でファイルを変換したりする」面倒を減らしたい人向けの記事です。

✅ この記事は実際に動作検証しています

CP932形式のCSVをGoogle Colabで読み込み、UTF-8 BOM付きCSVへ変換しました。変換前後のデータ一致とBOMの付与を確認し、作成したCSVをGoogleスプレッドシートへ実際に読み込んで日本語が正常に表示されることも確認しています。

検証結果: CP932 → UTF-8 BOM変換:成功 / データ一致:True / BOM確認:True / Googleスプレッドシート表示確認済み

この記事はこんな人向け

  • 取引先から受け取ったCSVの日本語が文字化けしている
  • Excelで開くと商品名や顧客名が正しく表示されない
  • CSVの読み込み時にUnicodeDecodeErrorが出る
  • CSVをExcelで扱いやすい形式に変換したい
  • 文字コードの変換を毎回手作業で行っている
  • PythonでCSVの文字コードを変える方法を知りたい

この記事でできるようになること

今回の方法では、文字コードの違いによって正常に読み込めないCSVを、別の文字コードで保存し直せるようになります。

例えば、日本語の商品データが入ったCSVを、正しく読み込めないケースです。

今回は、

文字コードの異なるCSV
↓
元ファイルに合った文字コードで読み込む
↓
UTF-8 BOM付きへ変換
↓
products_fixed.csvとして保存
↓
変換前後のデータを確認

という流れで処理します。

文字コードは、文字をコンピューター上で記録するための形式です。

今回使用する2つの形式は、次のようなものです。

文字コード特徴
CP932日本語Windows環境などで使用される文字コード
UTF-8 BOM付きファイルの先頭にUTF-8を識別するための情報が付いた形式

今回の検証では、CP932形式のCSVを読み込み、UTF-8 BOM付きへ変換します。

なお、文字コードを変換しても、商品名や価格などのデータそのものを変更することが目的ではありません。

データの内容を維持したまま、別の文字コードで保存し直すことが今回のゴールです。

今回使うデータ

今回は、商品マスターを想定した次のデータを使います。

商品コード商品名地域価格
A001りんご東京都1200
A002みかん大阪府1500
A003ぶどう福岡県2000

このデータから、文字コードの異なる3種類のCSVを作成します。

products_utf8.csv
products_cp932.csv
products_utf8_bom.csv

今回は、このうちCP932形式のCSVを変換対象とします。

変換後のファイル名は、

products_fixed.csv

です。

Google Colabで検証用CSVを作成する

まず、Google Colabで新しいノートブックを作成します。

Google Colabを開く

今回は、

TaskLess Lab_CSV文字化け修正テスト

という名前にしました。

次のコードを実行して、検証用の商品データとCSVを作成します。

import pandas as pd

# テスト用の商品データ
df = pd.DataFrame({
    "商品コード": ["A001", "A002", "A003"],
    "商品名": ["りんご", "みかん", "ぶどう"],
    "地域": ["東京都", "大阪府", "福岡県"],
    "価格": [1200, 1500, 2000]
})

# 文字コードの異なるCSVを作成
df.to_csv("products_utf8.csv", index=False, encoding="utf-8")

df.to_csv("products_cp932.csv", index=False, encoding="cp932")

df.to_csv("products_utf8_bom.csv", index=False, encoding="utf-8-sig")

display(df)

print("テスト用CSVを3種類作成しました")

実行すると、Google Colabの左側にあるファイル一覧に3種類のCSVが生成されます。

正しい文字コードを指定してCSVを読み込む

まずは、文字コードが異なる2つのCSVを正常に読み込めるか確認します。

今回は、pd.read_csv() の encoding で文字コードを指定します。

UTF-8形式のCSVなら、

df_utf8 = pd.read_csv(
    "products_utf8.csv",
    encoding="utf-8"
)

CP932形式のCSVなら、

df_cp932 = pd.read_csv(
    "products_cp932.csv",
    encoding="cp932"
)

です。

今回は次のコードで、2つのファイルをまとめて確認しました。

# UTF-8のCSVを読み込む
df_utf8 = pd.read_csv(
    "products_utf8.csv",
    encoding="utf-8"
)

# CP932のCSVを読み込む
df_cp932 = pd.read_csv(
    "products_cp932.csv",
    encoding="cp932"
)

print("【UTF-8】")
display(df_utf8)

print("【CP932】")
display(df_cp932)

今回の検証では、どちらも商品名や地域名が正常に表示されました。

つまり、元のCSVに合った文字コードを指定すれば、日本語を正しく読み込めることを確認できました。

文字コードを間違えるとどうなる?

次に、あえて間違った文字コードでCSVを読み込んでみます。

今回は、CP932形式で保存したCSVを、UTF-8として読み込みます。

# CP932のファイルを、あえてUTF-8として読み込む
try:
    df_wrong = pd.read_csv(
        "products_cp932.csv",
        encoding="utf-8"
    )

    display(df_wrong)

except UnicodeDecodeError as e:
    print("文字コードが一致していないため、読み込みエラーが発生しました。")
    print(type(e).__name__)

今回のテストでは、

文字コードが一致していないため、読み込みエラーが発生しました。
UnicodeDecodeError

と表示されました。

文字コードが一致しない場合は、日本語が文字化けして表示されるだけでなく、今回のように読み込み自体が失敗することもあります。

なお、すべての文字コードの組み合わせで同じエラーが出るわけではありません。

CP932のCSVをUTF-8 BOM付きに変換する

ここから、実際にCSVの文字コードを変換します。

今回は、

products_cp932.csv

を読み込み、

products_fixed.csv

という新しいファイルを作成します。

今回使用したコードはこちらです。

import pandas as pd

# 1. 元のCSVを正しい文字コードで読み込む
df = pd.read_csv(
    "products_cp932.csv",
    encoding="cp932"
)

# 2. UTF-8 BOM付きで新しいCSVを保存
df.to_csv(
    "products_fixed.csv",
    index=False,
    encoding="utf-8-sig"
)

print("変換が完了しました")
display(df)

今回の検証では、

変換が完了しました

と表示され、日本語の商品データも正常に出力されました。

読み込みと保存で文字コードを変えている

今回のコードで重要なのは、読み込み時と保存時で文字コードを変えている点です。

コード役割
encoding="cp932"元CSVをCP932として読み込む
encoding="utf-8-sig"UTF-8 BOM付きとして保存する
index=Falsepandasの行番号をCSVに追加しない

今回の処理は、

CP932のCSV
↓
正しい文字コードで読み込む
↓
UTF-8 BOM付きで保存
↓
新しいCSVを作成

というシンプルな仕組みです。

変換前後のデータが一致しているか確認する

文字コードの変換後に、商品名や価格などが変わっていないか確認します。

今回は、変換後のCSVをもう一度読み込み、変換前のデータと比較しました。

# 変換後のCSVを読み込む
df_fixed = pd.read_csv(
    "products_fixed.csv",
    encoding="utf-8-sig"
)

# 変換前後のデータを比較
if df.equals(df_fixed):
    print("成功:変換前後のデータは一致しています")
else:
    print("注意:変換前後でデータに違いがあります")

display(df_fixed)

# UTF-8のBOMが付いているか確認
with open("products_fixed.csv", "rb") as f:
    first_bytes = f.read(3)

print("先頭3バイト:", first_bytes)
print("BOM確認:", first_bytes == b"\xef\xbb\xbf")

今回の実行結果はこちらです。

成功:変換前後のデータは一致しています
先頭3バイト: b'\xef\xbb\xbf'
BOM確認: True

今回のテストデータでは、変換前後の内容が一致しました。

また、CSVの先頭3バイトがUTF-8のBOMに該当することも確認できました。

これで、UTF-8 BOM付きへの変換が正しく実行されたことを確認できます。

※この一致確認は今回のサンプルデータでの結果です。実際の業務データでは、商品コードの先頭ゼロや日付など、読み込み時のデータ型にも注意してください。

変換後のCSVを保存・ダウンロードする

変換したCSVは、Google Colabの左側のファイル一覧からダウンロードできます。

今回保存したファイルは、

products_fixed.csv

です。

左側のフォルダアイコンを開き、ファイルのメニューから「ダウンロード」を選択します。

これで、変換後のCSVをパソコンに保存できます。

Googleスプレッドシートでも正常に読み込めるか確認する

今回は、変換したCSVをGoogleスプレッドシートにも取り込んで確認しました。

操作手順は次のとおりです。

  1. Googleスプレッドシートを開く
  2. 「ファイル」→「インポート」を選択する
  3. products_fixed.csvをアップロードする
  4. 区切り文字を「自動的に検出する」に設定する
  5. 「データをインポート」をクリックする

今回の検証では、

商品コード商品名地域価格
A001りんご東京都1200
A002みかん大阪府1500
A003ぶどう福岡県2000

のように、日本語や数値が正常に表示されました。

これで、Google Colabで変換したCSVを、Googleスプレッドシートでも正常に読み込めることを確認できました。

なお、今回はMicrosoft Excelでの実機確認は行っていません。Googleスプレッドシートで正常に表示されたことは、Excelでの正常表示を保証するものではありません。

元CSVを上書きせず、別ファイルで保存する理由

今回は、

products_cp932.csv

を上書きせず、

products_fixed.csv

という別ファイルを作成しました。

これは、変換前の元データを残しておくためです。

文字コードの指定を間違えたり、変換結果に問題があったりしても、元のCSVが残っていればやり直せます。

特に、文字化けした内容のまま元ファイルを上書き保存すると、元の日本語を復元できなくなる場合があります。

実務でも、

元のCSV
↓
文字コードを変換
↓
別名で保存
↓
変換結果を確認

という流れにしておくと安全です。

自分のCSVで変更する場所

今回のコードを自分のCSVに使う場合、主に変更するのは次の3か所です。

今回の設定自分のCSVでは
products_cp932.csv変換したいCSVのファイル名
encoding="cp932"元ファイルの正しい文字コード
products_fixed.csv変換後に保存するファイル名

例えば、取引先から受け取ったCSVが、

supplier_products.csv

という名前なら、次のように変更します。

import pandas as pd

# 自分のCSVを読み込む
df = pd.read_csv(
    "supplier_products.csv",
    encoding="cp932",
    dtype=str
)

# UTF-8 BOM付きに変換して保存
df.to_csv(
    "supplier_products_fixed.csv",
    index=False,
    encoding="utf-8-sig"
)

print("CSVの変換が完了しました")

この応用例では、商品コードなどを文字列として保持しやすいようにdtype=strを指定しています。

ただし、この例は実際の取引先CSVを使った検証ではありません。業務で使う場合は、元データの文字コードや列構成を確認してから実行してください。

また、実際のCSVを使う場合は、先にGoogle Colabの左側のファイル一覧へアップロードしておきます。

すべてのCSVがCP932とは限らない

今回はCP932形式のCSVを使って検証しましたが、CSVの文字コードはファイルの作成元によって異なります。

例えば、

  • UTF-8
  • UTF-8 BOM付き
  • CP932

などがあります。

元ファイルがUTF-8なら、

encoding="utf-8"

のように指定する必要があります。

文字コードが分からない場合は、まずCSVの出力元や保存時の設定を確認しましょう。

また、CP932は一般にShift_JIS系の文字コードとして扱われますが、厳密には同じものではありません。今回の記事では、実際に検証したCP932を使用しています。

ExcelでCSVが文字化けする場合は?

ExcelでCSVを開いたときに日本語が文字化けする場合は、CSVをダブルクリックするのではなく、Excelのデータ取り込み機能から文字コードを指定する方法があります。

Microsoft公式でも、UTF-8形式のCSVについて、BOM付きCSVやデータ取り込み機能を使う方法が案内されています。

ただし、今回はExcelを使用できる環境がなかったため、Excel実機での操作・表示確認は行っていません。

Excelでの詳しい操作方法は、お使いのバージョンに対応したMicrosoft公式ヘルプを確認してください。

今回実際に確認した範囲は、Google Colabでの文字コード変換と、Googleスプレッドシートでの読み込みまでです。

どんな仕事で使える?

今回の方法は、ECの商品マスター以外にも使えます。

  • 取引先から受け取った商品CSVの文字コード変換
  • 複数のシステムから出力されたCSVの形式統一
  • 顧客リストの文字コード変換
  • 売上データの取り込み前処理
  • 別システムへ登録するCSVの形式調整
  • 定期的に受け取るCSVの変換作業

特に、

毎月、同じ取引先から同じ形式のCSVを受け取り、別のシステムへ取り込んでいる

といった仕事では、今回のコードを繰り返し利用できます。

ただし、文字コードが異なる複数のCSVをすべて自動判定する処理ではありません。今回は、元ファイルの文字コードが分かっていることを前提としています。

文字コードの変換と表記ゆれの修正は別の作業

今回行ったのは、CSVの文字コードを変換する処理です。

例えば、

A001
A001
a001

のような表記ゆれは、文字コードを正しく変換しても自動的には統一されません。

これらを整える場合は、別途データ整形が必要です。

前回の記事では、

  • 余分な空白の削除
  • 全角英数字を半角へ統一
  • 大文字・小文字の統一

を行いました。

あわせて読みたい

Excel・CSVの表記ゆれや余分な空白をまとめて整える方法|Google Colab+Python

また、変換後のCSVで空白セルや入力漏れを確認したい場合は、欠損チェックも活用できます。

Excel・CSVの空白セルや欠損データを自動チェックする方法|Google Colab+Python

これらを組み合わせると、

CSVの文字コードを統一
↓
空白セルを確認
↓
表記ゆれを整える
↓
重複チェック
↓
比較・集計

というデータ整理の流れを作れます。

まとめ

今回は、Google ColabとPythonを使ってCSVの文字コードを変換しました。

実際に確認したのは、

  • 文字コードの異なるCSVを3種類作成
  • UTF-8・CP932形式のCSVを正常に読み込み
  • 文字コード不一致による読み込みエラーを再現
  • CP932からUTF-8 BOM付きへ変換
  • 変換前後のデータが一致することを確認
  • UTF-8のBOMが正しく付与されたことを確認
  • Googleスプレッドシートで日本語が正常に表示されることを確認

です。

特に、文字コードの異なるCSVを扱う場合は、元ファイルに合った文字コードで読み込んでから、目的に合った形式で保存し直すことが重要です。

毎回CSVの文字化けを調べたり、手作業で保存形式を変更したりしているなら、今回の方法で文字コード変換を自動化して、面倒な修正作業を減らしていきましょう!

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