WordPressから書き出したCSVをExcelで開いたら、日本語がまるごと文字化けしていた——制作や運用の現場でよくある場面です。
結論から言うと、この文字化けはファイルの文字コードを「UTF-8」から「Shift-JIS」に変換すれば直ります。そしてテキストエディット.appで変換できないときでも、Macのターミナルとiconvコマンドを使えば確実に変換できます。
この記事では、テキストエディットで変換できない原因を押さえたうえで、ターミナルでの変換手順、変換前の文字コード確認方法、そして実務でつまずきやすいポイントまでを解説します。
目次
WordPressが書き出すCSVの多くはUTF-8で保存されています。一方、WindowsのExcelは古くからShift-JIS(正確にはCP932)を前提に動くため、UTF-8のCSVをそのまま開くと文字コードの解釈がずれ、日本語が化けてしまいます。
そのため、Excelできれいに開きたい場合はファイルをUTF-8からShift-JISへ変換しておくのが手っ取り早い対処になります。以前、テキストエディット.appを使って文字コードを変更する方法を紹介しました。
ただ、ファイルによっては保存時に「〜保存できませんでした。指定されたテキストエンコーディングには対応していません。」というエラーが出て、テキストエディット.appでは変換できないことがあります。

これは、ファイル内にShift-JISでは表現できない文字が含まれている場合などに起こります。こうしたケースでも、ターミナルを使えば問題なく変換を進められます。
それでは、UTF-8のCSVをShift-JISへ変換する具体的な手順を見ていきます。追加のインストールは不要で、Mac標準のiconvコマンドだけで完結します。
まずターミナルを起動し、対象のCSVファイルがあるフォルダへcdコマンドで移動します。
例)デスクトップに「csv」フォルダがある場合:
cd /Users/username/Desktop/csv
パスを手入力する必要はありません。cdと入力したあと、対象フォルダをターミナルのウインドウにドラッグ&ドロップすれば、そのフォルダまでのパスが自動で入力されます。
移動できたら、次のコマンドでUTF-8からShift-JISへ変換します。
iconv -c -f utf-8 -t shift-JIS input.csv > output.csv
各オプションの意味は次のとおりです。
-c:変換できなかった文字を出力しない-f utf-8:元ファイルの文字コードを指定する-t shift-JIS:変換後の文字コードを指定するinput.csv:変換したい元ファイルoutput.csv:変換後に出力するファイル名
実行するとoutput.csvという新しいファイルが作られ、その中身がShift-JISに変換されています。元ファイルはそのまま残るので、失敗しても安心です。
逆に、Shift-JISのCSVをUTF-8に戻したいときは、-fと-tを入れ替えるだけです。
iconv -c -f shift-JIS -t utf-8 output.csv > output_utf8.csv
こちらも同様に、UTF-8へ変換されたoutput_utf8.csvが新しく作成されます。
変換で失敗する原因の多くは、元ファイルの文字コードを取り違えていることです。-fに実際とは違う文字コードを指定すると、正しく変換できません。そこで、変換前に元ファイルが本当にUTF-8かどうかを確認しておくと確実です。
確認にはfileコマンドを使います。
file -I input.csv
出力結果にcharset=utf-8と表示されれば、そのファイルはUTF-8です。この一手間を挟むだけで、変換のやり直しをぐっと減らせます。

手軽で確実なiconvですが、実際の案件では次の2点に気をつけると安全です。
1つ目は、-cオプションの副作用です。-cはShift-JISで表現できない文字をエラーにせず黙って削除します。処理は止まらず一見成功したように見えるため、①(丸数字)や一部の環境依存文字などが気づかないうちに欠落することがあります。変換後は、そうした文字が抜けていないか出力ファイルを一度確認しておくと安心です。
2つ目は、そもそもShift-JISに変換すべきかという判断です。文字化けの多くは「ファイルが悪い」のではなく「開くアプリ側の解釈」で起きています。最近のExcelはUTF-8(BOM付き)のCSVも正しく開けるため、渡す相手の環境によっては変換せずBOM付きUTF-8のまま渡すほうが安全なこともあります。納品先の環境に合わせて使い分けるとよいでしょう。
iconvコマンドなら確実に変換できるfile -Iで元ファイルの文字コードを確認しておくと失敗を防げる-cは非対応文字を黙って削除するため、変換後の欠落チェックを忘れないターミナルというと身構えてしまいがちですが、iconvは覚えてしまえば数秒で済む頼れるコマンドです。文字コードの変換で困ったときの引き出しとして、ぜひ手元に置いておいてください。