CSVファイルを保存するとき、
UTF-8
BOM付きUTF-8
Shift_JIS
のどれを選べばよいのか迷うことがあります。
見た目は同じCSVでも、文字コードが合っていないと、
- Excelで日本語が文字化けする
- システムへアップロードできない
- 一部の文字だけ「?」になる
- 別のソフトでは正常なのにExcelでは崩れる
といったことがあります。
結論からいうと、どの文字コードが常に正解というわけではありません。
ファイルを何で開くのか、どのシステムへ渡すのかによって選びます。
まず結論|CSVではどれを選ぶ?
迷った場合は、次のように考えると分かりやすいです。
| 用途 | 選択の目安 |
|---|---|
| Webサービスやシステム間で使う | UTF-8 |
| Excelでそのまま開いてもらう | BOM付きUTF-8 |
| 古い業務システムなどが指定している | Shift_JIS |
| アップロード先が文字コードを指定している | 指定された形式を使う |
最優先するのは、受け取る側の仕様です。
「UTF-8でアップロードしてください」と指定されているサービスに、Excelで開きやすいからという理由でShift_JISを送るのは適切ではありません。
UTF-8とは?
UTF-8はUnicodeの文字を扱うための文字コードです。
日本語だけでなく、多くの言語や記号を一つの文字コードで扱えるため、Webやデータ交換など幅広い場面で使われています。
CSVでも、特に受け取り側から別の指定がなければUTF-8が使われるケースがあります。
ただし、UTF-8のCSVをExcelで直接開いたときの扱いには注意が必要です。
Microsoftは、UTF-8のCSVについて、BOM付きで保存されていればExcelで通常どおり開けると案内しています。
BOMなしの場合でもUTF-8として読み込むことはできますが、[データ]→[テキスト/CSVから]など、文字コードを指定できる方法で読み込む必要がある場合があります。
BOM付きUTF-8とは?
BOMは、ファイルの先頭に付けられる小さな識別情報です。
UTF-8の場合、BOMは文字の並び順を指定するためというより、「このデータはUTF-8です」と判断するための目印として使われます。
Unicode Consortiumも、UTF-8のBOMについて、バイト順を示すものではなくUTF-8であることを識別するためのシグネチャとして利用できると説明しています。
そのため、
UTF-8
と
BOM付きUTF-8
は、本文の文字を表す方式そのものがまったく別というわけではありません。
この記事では分かりやすく区別するため、
- BOMなしのUTF-8 → UTF-8
- ファイル先頭にBOMが付いたUTF-8 → BOM付きUTF-8
と表記します。
Excelで使うならBOM付きUTF-8が便利なことがある
CSVをExcel利用者へ渡し、
ファイルをダブルクリックするなどして、そのまま開いてもらいたい
場合には、BOM付きUTF-8が扱いやすいことがあります。
Microsoftのサポート情報でも、UTF-8 CSVがBOM付きの場合は通常どおり開けるとされています。
BOMなしUTF-8の場合は、
データ → テキスト/CSVから
などを利用し、UTF-8として読み込む方法があります。
そのため、
CSVを作った側では正常なのに、相手がExcelで開くと文字化けする
という場合は、BOMの有無も確認するポイントになります。
BOM付きUTF-8なら何にでも使えるわけではない
Excelでは便利なBOMですが、すべてのシステムがBOMを必要としているわけではありません。
Unicode Consortiumも、UTF-8のBOMについて、受け取り側によってはBOMを想定しておらず、ファイル形式やプロトコルによって問題になる場合があると説明しています。
そのため、
Excelで開くから常にBOM付き
ではなく、
受け取り側の仕様を確認する
ことが重要です。
たとえばWebサービスへのCSVアップロードで「UTF-8(BOMなし)」と指定されていれば、その指定に従います。
Shift_JISとは?
Shift_JISは、日本語環境で長く使われてきた文字コードです。
古いWindowsソフトや業務システム、既存のCSV連携などでは、現在でもShift_JISを指定されることがあります。
そのため、
新しい形式だからUTF-8へ変えればよい
とは限りません。
受け取り先がShift_JISを前提としている場合は、Shift_JISへ変換して渡します。
Shift_JISでは扱えない文字に注意
UTF-8とShift_JISでは扱える文字の範囲が異なります。
UTF-8で保存できる文字でも、Shift_JISへ変換すると表現できない場合があります。
たとえば、環境依存の文字や一部の記号などが含まれているデータでは注意が必要です。
そのため、UTF-8からShift_JISへ変換する場合は、
変換後もすべての文字が正常に残っているか
を確認します。
デジタル作業室のCSV文字コード変換ツールでは、Shift_JISで表現できない文字が含まれている場合、文字を勝手に ? へ置き換えて保存するのではなく、変換を停止する仕様にしています。
「Shift_JIS」と書かれていても仕様を確認する
業務システムによっては、
Shift_JIS
Windows-31J
CP932
などの表記が使われる場合があります。
これらは実務上近いものとして扱われることもありますが、厳密には同じではありません。
CSVを特定のシステムへ取り込む場合は、「Shift_JISで大丈夫だろう」と判断するより、そのシステムが指定している文字コードに従うのが確実です。
Excelで文字化けしたら文字コードを変更する前に確認する
Excelで文字化けしたからといって、元ファイルをすぐShift_JISへ変換しなければならないとは限りません。
UTF-8のままでも、
データ → テキスト/CSVから
などの方法で読み込み、文字コードを指定すれば正常に開けることがあります。
MicrosoftもBOMなしUTF-8 CSVについて、Power Queryやテキストインポート機能を利用する方法を案内しています。
文字化けが起こる理由とExcelでの開き方については、「CSVがExcelで文字化けする原因と直し方|UTF-8・Shift_JISの違い」で詳しく紹介しています。
UTF-8とShift_JISを変換するには?
文字コードが合わない場合は、CSVを別の文字コードへ変換できます。
デジタル作業室の「CSV文字コード変換|UTF-8・Shift_JISを無料で変換」では、
- UTF-8
- BOM付きUTF-8
- Shift_JIS
へCSVを変換できます。
選択したCSVは対応ブラウザ上で処理し、サイトのサーバーへアップロードしません。
アップロード先や使用するソフトが指定している文字コードを確認してから、必要な形式へ変換してください。
複数のCSVを結合するときも文字コードを確認する
複数のCSVファイルをまとめる場合も、文字コードが異なるファイルをそのまま扱うと問題になることがあります。
たとえば、
- 1つ目はUTF-8
- 2つ目はShift_JIS
という状態です。
CSVを結合する前に、それぞれの文字コードを確認し、必要に応じてそろえておくと扱いやすくなります。
デジタル作業室では、複数CSVを1つへまとめるCSV結合ツールも利用できます。
よくある質問
UTF-8とBOM付きUTF-8はどちらがいいですか?
用途によります。
Webサービスやシステム側からUTF-8を指定されている場合は、その仕様に従います。
一方、CSVをExcelで直接開く用途では、BOM付きUTF-8の方が文字コードを認識してもらいやすい場合があります。
BOMとは何ですか?
ファイルの先頭に付けられる識別情報です。
UTF-8では、バイト順を決めるためではなく、UTF-8であることを示す目印として使われる場合があります。
Excel用CSVならShift_JISが一番安全ですか?
必ずしもそうではありません。
BOM付きUTF-8ならExcelで通常どおり開けるとMicrosoftは案内しています。
また、Shift_JISでは表現できない文字が含まれる可能性もあるため、データ内容や受け取り先の仕様に合わせて選びます。
CSVをUTF-8に変換すれば文字化けは必ず直りますか?
必ず直るとは限りません。
文字化けは、ファイルの文字コードと読み込む側が想定している文字コードが一致していないときに起こることがあります。
そのため、単純にUTF-8へ変えるのではなく、使用するソフトやアップロード先が何を想定しているかを確認します。
UTF-8とShift_JISでファイルの内容は変わりますか?
同じ文字を表現できている場合、見た目の文章や表の内容は同じです。
ただし、データを保存する際のバイト表現は異なります。
また、Shift_JISで表現できない文字が含まれている場合には、正常に変換できないことがあります。
「どれが優れているか」ではなく受け取り先で選ぶ
CSVの文字コードを選ぶときは、
UTF-8が新しいから正解
Shift_JISがExcel向けだから正解
BOM付きなら何でも安全
という決め方ではなく、
そのファイルを何で使うのか
を確認します。
基本的には、
システム指定あり → 指定に従う
Excelで直接開くことを重視 → BOM付きUTF-8を検討
UTF-8対応のWebサービスや処理系 → UTF-8を検討
Shift_JIS指定の既存システム → Shift_JIS
と整理すると選びやすくなります。
文字コードが合わない場合は、CSV文字コード変換ツールで必要な形式へ変換できます。
