![見出し画像](https://assets.st-note.com/production/uploads/images/172281604/rectangle_large_type_2_df954d2e364a806c4d2d468d25a3289b.png?width=1200)
CSVの文字化けにさようなら!Shift-JIS vs. UTF-8 エンコーディング選択ガイド
はじめに
こんにちは、株式会社SHIFT アプリケーション開発テクノロジーGのフィンです。
皆さんはCSVファイルを生成したことがありますか?
テキストベースで、特別なライブラリなしでも手軽に生成できるフォーマットとして、CSVは広く利用されています。
ところで、CSVファイルを扱う際、「文字化け」に頭を悩ませた経験はないでしょうか?特に、Excelで開くことを想定して作ったCSVファイルで、日本語が「???」と表示されてしまう問題は、多くの方が経験されたことがあると思います。
CSVファイルは、システム間のデータ連携など、Excel以外でも利用されることも多いです。しかし、この記事では、特にWebサイトからのダウンロードなど、ユーザーが取得したCSVファイルをExcelで開いて閲覧・編集するケースを想定して、文字化け対策について解説します。
このブログでは、CSVファイルの文字化け問題の原因と対策を、エンコーディングの観点から解説します。特に、日本語環境でよく使われる Shift-JIS と UTF-8 のどちらを選択すべきか、その判断基準をまとめました。
UTF-8なら、この一手で文字化け解消!
長々と原因や対策を検討する前に、「とにかく今すぐ解決したい!」という方のために、結論を先に書きましょう。
Excelで文字化けが起きる主な原因は、Excelがデフォルトで BOM (Byte Order Mark) 付きの UTF-8 しか認識できないからです。そのため、解決策もシンプル。出力するファイルの先頭に BOM (\uFEFF) を付与するだけです。
たったこれだけで、UTF-8のCSVファイルをExcelで文字化けすることなく開けるようになります。
以下、Node.jsでの実装例です。本質はファイルの先頭に\ufeffを書き込む部分です。
例:
const fs = require('fs');
const data = [
["カラム名1", "カラム名2", "カラム名3"], // ヘッダー
["データ1", "データ2", "データ3"],
["データA", "データB", "データC"],
];
// CSV文字列を生成 (ここでは簡略化のため、手動で生成)
let csvContent = "\ufeff"; // BOMを先頭に追加: これが重要!
data.forEach(row => {
csvContent += row.join(",") + "\r\n";
});
// ファイルに書き込み
fs.writeFileSync('output.csv', csvContent, { encoding: 'utf8' });
console.log("CSVファイルが生成されました: output.csv");
このコードではoutput.csvがBOM付きUTF-8で出力され、Excelで正しく開けます。
なぜ文字化けが起こるのか?
文字化けの主な原因は、CSVファイルを生成したアプリケーションと、それを開くアプリケーション(例えばExcel)で、使用している文字エンコーディングが異なる ことにあります。
文字エンコーディングとは、コンピュータ上で文字を表現するためのルールです。日本語を扱うためのエンコーディングとしては、Shift-JIS、UTF-8、EUC-JPなど、様々な種類が存在します。
近年の多くのアプリケーションは、国際化対応などの点から、UTF-8をデフォルトのエンコーディングとして採用しています。しかし、特にWindows版のExcelは、古いバージョンとの互換性維持などの理由から、Shift-JISなどのローカルなエンコーディングを優先的に使用する傾向があります。
そのため、UTF-8で生成されたCSVファイルをExcelで開くと、ExcelがShift-JISとして解釈しようとしてしまい、結果として文字化けが発生してしまうのです。
Shift-JIS vs. UTF-8:どちらを選ぶべきか?
それでは、CSVファイルのエンコーディングとして、Shift-JISとUTF-8のどちらを選択すべきでしょうか?
結論から言うと、迷ったら UTF-8 with BOM を選びましょう!
以下に、状況に応じたエンコーディング選択のチートシートを示します。
UTF-8 (with BOM) を選択すべきケース
![](https://assets.st-note.com/img/1738222091-BcShzsDLT8ru6NU1gfqoKdYk.png?width=1200)
Shift-JISを選択すべきケース
![](https://assets.st-note.com/img/1738222146-SvLleNK5m09XcwtFr7zpIBED.png?width=1200)
Shift-JIS選択時の注意点
文字化けリスク: Shift-JISで表現できない文字は “?” などに文字化けしたり、データが失われる。
環境依存: 異なるOSや設定によっては、正しく表示されない可能性がある。
非推奨: 特別な理由がない限り、Shift-JISの使用は避けるべき。
まとめ
CSVファイルの文字化け問題は、適切なエンコーディングを選択することで解決できます。基本的には、UTF-8 with BOM を選択しておけば間違いありません。
Shift-JIS を選択するのは、極めて限定的な状況のみです。Shift-JIS を選択する場合は、文字化けリスクや環境依存の問題を十分に理解した上で、慎重に判断する必要があります。
このガイドを参考に、もうCSVの文字化けに悩まされることのない、快適なデータライフをお送りください!
執筆者プロフィール:Huynh Minh Anh Tuan(フィン ミン アイン トゥアン)
SHIFT アプリケーション開発テクノロジーG
✅SHIFTへのお問合せはお気軽に
✅お役立ち資料無料ダウンロード
SHIFTについて(コーポレートサイト)
SHIFTのサービスについて(サービスサイト)
SHIFTの導入事例
🌟SHIFTの採用情報はこちら
PHOTO:Unsplashのnadi borodina