CSVが文字化けする原因と直し方(「é」や「????」の意味)
「é」や「Сума」のような文字化けは、CSVがある文字コードで保存され、別の文字コードとして開かれたことを意味します。文字はファイルの中に残っていて、読み取り方が間違っているだけです。正しい文字コードで開き(CSVビューアは自動で判定します)、UTF-8でコピーを保存しましょう。疑問符(「????」)は別の問題で、多くの場合、ファイルが書き出された時点で文字が失われています。
1分でわかる文字コード
CSVファイルはただのテキストで、ディスク上のテキストは数値(バイト)の並びにすぎません。文字コード(エンコーディング)とは、どの数値がどの文字を表すかを決めた表です。英字と数字については、ほぼすべての文字コードが同じ割り当てを使っています。銀行から書き出したデータの数値は正しく見えるのに、名前や摘要だけが化けるのはそのためです。
会計ソフトや銀行からの書き出しでよく出会うのは、次の3つです。
- UTF-8:現在の標準。あらゆる言語の文字を1つのファイルに保存できます。英字以外の文字は1文字あたり2バイト以上を使います。
- Windows-1251:キリル文字(ウクライナ語、ロシア語、ブルガリア語、セルビア語)用の古い1バイト文字コード。古い会計ソフトの多くが今もこれで書き出します。
- Windows-1252:西ヨーロッパ言語用の古い1バイト文字コード。é、ü、ñ、ø、€などを扱います。
日本語の古いCSVでは、これらに加えて Shift_JIS もよく使われています。
ファイル自体には、どの文字コードを使っているかが書かれていないのが普通です。開くプログラムが推測するしかなく、推測を誤ると文字化け(英語では mojibake)が起こります。
化け方を読む:パターンごとの意味
どう化けているかが、何が起きたかの手がかりになります。
| 表示されている文字 | 本来の文字 | 起きたこと |
|---|---|---|
é, ü, € |
é, ü, € | UTF-8のファイルをWindows-1252として開いた |
Сума(ÐとÑが多い) |
Сума | UTF-8のキリル文字をWindows-1252として開いた |
Ñóìà(アクセント付きのラテン文字) |
Сума | Windows-1251のファイルをWindows-1252として開いた |
Cafй |
Café | Windows-1252のファイルをWindows-1251として開いた |
�(黒いひし形に?) |
任意の文字 | 古い文字コードのファイルをUTF-8として開いた |
???? |
任意の文字 | ファイルの保存時に文字が失われた |
「Ã」+何か、「Ð」や「Ñ」+何か、という組み合わせは、UTF-8が古い文字コードとして読まれたときの特徴です。英字以外の文字はUTF-8では2バイトになり、古い文字コードの表ではそれぞれのバイトが別々の記号として表示されるのです。これは良い知らせで、何も失われていません。UTF-8としてファイルを開けば直ります。
ただの疑問符は悪い知らせです。多くの場合、その文字を収める場所のない文字コード(たとえばキリル文字をWindows-1252)でテキストを保存しようとしたプログラムが、該当する文字をすべて ? に置き換えたときに現れます。元の文字はもうファイルに残っておらず、どんなビューアでも元に戻せません。元のシステムから書き出し直すしかありません。書き出し画面で選べるなら、UTF-8か地域に合った正しい文字コードを選んでください。
BOM:ExcelがUTF-8を読み違える理由
UTF-8のファイルの先頭には、BOM(バイトオーダーマーク)と呼ばれる目に見えない3バイトが付いていることがあります。「このファイルはUTF-8です」というヒントです。
CSVをダブルクリックすると、Excelはこのヒントに大きく頼ります。BOMがあれば通常はUTF-8として正しく読みますが、ない場合はパソコンの古い文字コード(日本語版Windowsなら Shift_JIS)とみなすことがよくあります。銀行から書き出したまったく問題のないUTF-8のファイルが「Сума」のように化けるのは、まさにこのためです。逆に、ほかのプログラムではBOMが最初の列見出しの先頭に  のようなゴミとして表示されることがあります。これが見えたら、ファイルはUTF-8で、BOMが文字として表示されているということです。
解決法1:文字コードを自動判定するツールで開く
一番手っ取り早いのは、文字コードを自動で判定させることです。Opener の CSVビューアはまずUTF-8を試し、合わなければテキストに応じてWindows-1251またはWindows-1252に切り替えるので、インポートウィザードなしで名前や摘要が正しく表示されます。区切り文字(カンマ、セミコロン、タブ、パイプ)も判定します。なお、Shift_JIS は自動判定の対象に含まれていないため、Shift_JIS のCSVには下の解決法2・3の方法を使ってください。
ファイルはブラウザ内で読み込まれ、どこにもアップロードされません。給与データ、請求書、銀行明細を扱うなら、これは大切な点です。ほかのプログラム用にファイルを直したいときは、書き出しボタンを使えば、表のきれいなUTF-8のコピーが手に入ります(書き出されるのは現在の表示なので、すべての行が必要なら先に検索をクリアしてください)。文字化けではなく、すべてが1列にまとまってしまうのが問題なら、CSVが1列で開く理由をご覧ください。
解決法2:Excelで「元のファイル」を正しく指定してインポートする
ファイルをダブルクリックしてはいけません。空白のブックを開き、「データ」タブの「テキストまたはCSVから」でインポートします。プレビュー画面に元のファイルのリストがあり、ここで文字コードを選べます。
éやСумаが表示されるファイルには 65001: Unicode (UTF-8)- 古いキリル文字のデータには、キリル文字(Windows)の項目(1251)
- 古い西ヨーロッパ言語のデータには、西ヨーロッパ言語(Windows)の項目(1252)
- 古い日本語のデータには、日本語(シフト JIS)の項目(932)
切り替えながらプレビューを見て、名前が正しく表示されたら、それが正しい文字コードです。そのままデータを読み込みます。ファイルを誰かに送る必要がある場合は、ただの「CSV」ではなく「CSV UTF-8」のファイル形式でExcelから保存してください。ただの「CSV」では、また古い文字コードが使われることがあります。
解決法3:Google スプレッドシート、LibreOffice、テキストエディタ
Google スプレッドシート。 Google スプレッドシートへのCSVのインポート(「ファイル」→「インポート」)は、UTF-8のファイルならうまくいき、インポート画面で区切り文字も選べます。古い文字コードのファイルには、あまり確実な方法ではありません。Windows-1251、Windows-1252、Shift_JIS などで書き出したファイルがまだ化ける場合は、ほかの方法でUTF-8に変換してから、そのコピーをインポートしてください。
LibreOffice Calc。 CSVを開くと、テキストのインポート用ダイアログが表示され、文字コードを選ぶリスト(英語版では「Character set」)があります。Unicode (UTF-8)、キリル文字 (Windows-1251)、西ヨーロッパ (Windows-1252)、日本語 (Shift_JIS) などを選ぶと、プレビューがすぐに更新されます。無料で、Windows、macOS、Linuxで使えます。
テキストエディタ。 Windowsのメモ帳、macOSのテキストエディット、VS Codeのようなコードエディタでは、保存するときに文字コードを選べます。注意点は、まずエディタが正しい文字コードでファイルを開いている必要があることです。エディタ上で文字が正しく見えていれば、UTF-8で保存しましょう。エディタでもすでに化けている場合、そのまま保存しても化けた文字が保存されるだけです。まず正しい文字コードで開き直してください。
よくある質問
CSVの「????」は直せますか?
たいていは直せません。疑問符は、ファイルを書き出したときに文字が置き換えられたことを意味し、元の文字はファイルに残っていません。会計ソフトや銀行からもう一度書き出してください。可能ならUTF-8を選びましょう。
保存や書き出しにはどの文字コードを使えばいいですか?
UTF-8です。あらゆる言語の文字を保存でき、最新のプログラムならどれでも理解できます。同僚がExcelでダブルクリックして開くなら、ファイルの先頭にBOMが付くように、Excelの「CSV UTF-8」形式を使いましょう。
文字コードを変えると数値も変わりますか?
変わりません。数字、ピリオド、カンマは、UTF-8、Windows-1251、Windows-1252で同じなので、金額や日付には影響しません。変わるのは英字以外の文字だけです。
銀行の明細データをオンラインで直しても安全ですか?
ツールがファイルをアップロードしない場合に限ります。CSVビューアはファイルの読み込みから書き出しまでをすべてブラウザ内で行うので、明細データが端末の外に出ることはありません。