エンコード・文字コード
文字化けしたCSVを文字コードを指定して読み直したい
使うツール
ファイル名の拡張子が.csvでも、中の文字コードまで決まるわけではありません。作成したアプリと開くアプリが別の方式を想定していれば、同じバイト列を違う文字として表示することがあります。文字化けした画面をそのまま保存し直すと、調べるべき元のバイトが失われる場合があるため、最初は原本を残して確認します。
文字コード変換ツールは、指定した方式で文字列をバイトへ変換したり、バイトを文字列へ戻したりします。文字コードを自動的に確定する鑑定機ではありません。ここでは『あ』という一文字を使って仕組みを確かめてから、実ファイルを扱うときの確認順序を整理します。
『あ』のバイトは、文字コードで変わる
UTF-8 e38182
UTF-16LE 4230
UTF-16BE 3042
Windows-31J 82a0入力へあを入れ、エンコード側で方式を切り替えると、この四つの結果を確認できます。文字は同じでも、バイトの値と長さが変わります。16進数が読めない文字へ置き換わったわけではなく、同じ文字を保存・伝送するための表現が違うのです。結果の16進表記をコピーするときは、どの文字コードを選んだかも一緒に残します。
同じ方式で戻せるかを試す
e38182をUTF-8でデコードすればあへ戻ります。82a0はWindows-31Jを選んで戻します。UTF-16ではバイトの並び順も指定の一部です。4230をUTF-16LEとして読む場合とUTF-16BEとして読む場合は同じ意味ではありません。『UTF-16だからどちらでもよい』とは扱わず、出力側と入力側の方式を対応させます。
往復で元の文字へ戻ることは、その例を扱える確認にはなりますが、ファイル全体の元の文字コードを一意に証明するものではありません。英数字だけなら複数の方式で同じように見える場合があります。日本語、記号、改行など、実データに含まれる特徴を持つ部分も確認し、作成元の出力設定や仕様と合わせて判断します。
エラーになることは、情報を守る手掛かり
このツールは、選んだ方式で不正なバイト列を読むと、黙って代替文字へ置き換えるのではなくエラーにします。たとえばUTF-8のe38182から最後の一バイトを落としたe381は、途中で切れた文字として扱われます。エラーを見たら、方式の選択ミスと、入力そのものの欠落の両方を候補にしてください。
反対に、エラーが出なかっただけでは正しい読み方と断定できません。別の方式でも、たまたま有効な文字列として解釈できることがあります。人が読める単語になったか、元の記号や件数を保っているか、作成元の指定と一致するかを確認します。『何か表示された』よりも、期待していた内容が損なわれていないことが重要です。
すでに?や�へ変わった文字は、戻せない場合がある
間違った方式で表示しただけなら、元のバイトを正しい方式で読み直せる可能性があります。しかし、読めなかった文字を?や�へ置き換えて保存した後では、複数の異なる元文字が同じ代替文字になっているかもしれません。その保存済み文字列だけから、元は何だったかを一意に復元することはできません。
この場合は変換を何度も繰り返すより、元ファイル、再エクスポート、バックアップを探します。文字化けした表示をコピーして渡すことと、元ファイルのバイトを渡すことは違います。調査依頼ではどちらを提供しているかを明確にし、原本を上書きせず別名の作業用コピーで確認してください。
Shift_JISという名前だけで互換性を決めない
現在の対応はUTF-8、UTF-16LE、UTF-16BE、WHATWGのshift_jisに基づくWindows-31Jのマッピングです。古いJISの規格や、各製品が同じ名称で扱う実装と完全に同一だと説明するものではありません。波ダッシュや拡張文字など、問題になった文字そのものを含む小さな例を、受け取り側でも確かめます。
Windows-31Jへ表せない文字を含むと、エンコードはエラーになります。😀などを入力して試せます。代わりの?を自動で入れて成功扱いにはしません。相手側がその文字コードしか受け付けない場合は、許可する文字の見直し、受け取り仕様の変更、明示的な代替表記などを検討します。どれもデータの意味に関わる判断であり、変換ツールが黙って決めることではありません。
文字コードが直っても、CSVの意味は別に確認する
読める文字へ戻ったら、次はCSV確認・編集で列と行を確認します。区切り文字、引用符内の改行、先頭ゼロ、空文字などは、文字コードとは別の問題です。文字化けを直すついでに表計算ソフトがIDを数値へ変えてしまえば、別の情報損失が起きます。元データと読み直した結果を、代表的な行で照合してください。
再発を防ぐには、受け渡し仕様へ文字コード、BOMの有無、改行、CSVの区切りを明記します。このツールのエンコード結果は16進表記であり、画面の文字列を保存しただけで任意の業務システム向けファイルが完成するわけではありません。最終的なファイル形式と取り込み方法は、受け取るアプリの仕様に合わせて確認します。
読める文字へ戻っても、ファイルの受け渡しはまだ終わらない
文字化けしたCSVを扱うなら、最初に元ファイルをそのまま残します。表計算ソフトで開いて保存し直す前のbyte列が重要です。誤った文字コードで読み取った後に保存すると、変換不能文字が?へ置き換わったり、先頭ゼロが消えたりして、問題が文字コードだけではなくなることがあります。変換候補を試すために元ファイルを何度も上書きするのではなく、同じ原本からそれぞれの候補を確かめます。『読み直す』操作と『別の文字コードで保存する』操作を分けると、どの段階で情報が変わったかを追えます。
候補を判断するとき、英数字だけの行が正しく見えることは強い根拠になりません。複数の文字コードで同じbyteが同じ英数字として読めるためです。実際のデータに含まれる日本語や記号など、方式によって差が出る箇所を確認します。ただし、数文字が読めたからファイル全体が正しいとも限りません。作成元の書き出し設定や提供元の仕様が分かるなら、それを優先して確認し、推定した方式は推定として記録します。見た目だけで確定したと説明しないことが大切です。
文字が読めるようになったら、行数、列数、引用符内の改行、空欄の意味を次に確認します。読み取り成功は文字の復元に関する結果であり、CSVとして同じデータを再現した保証ではありません。文字コード、区切り文字、改行形式、列の型を一組の条件として渡すと、次の人が同じ読み方を再現できます。このツールの結果が16進のbyte列として表示される操作では、その文字列をそのまま業務用CSVとして保存しないことにも注意してください。