fixmint
JA

ExcelをCSVに変換しても文字化けしない方法:UTF-8とBOM、区切り文字

著 · · 5分で読めます

CSVの文字化けの多くは、エンコーディングの不一致が原因です。ファイルはUTF-8で保存されているのに、Windowsの文字コードで開かれてしまうことで起きます。シートはCSV UTF-8形式で書き出してください。開くプログラムがExcelなら、バイトオーダーマーク(BOM)を付けます。また、ロケールに合った区切り文字を選びます。書き出す前に、郵便番号や電話番号などの列を文字列の形式に設定しておくと、先頭の0が消えません。

ExcelをCSVに変換CSVが必要だけどExcelファイルしかない無料で使う

「é」が「é」になる理由

ファイル内の文字はバイト列として保存されています。UTF-8では、文字「é」は2バイト(C3とA9)です。これらのバイトをWindowsの一般的な文字コードであるWindows-1252として読み込むプログラムは、C3を「Ã」、A9を「©」として解釈します。その結果、「café」は「café」と表示されます。これは自分でも確認できます。「é」をUTF-8で符号化し、その結果をWindows-1252で復号すると「é」になります。「ü」「ñ」「ö」も同じように崩れます。

解決策は文字を直接編集することではありません。ファイルがどの文字コードを使っているかをプログラムに正しく伝えることです。

UTF-8とBOM

UTF-8は、Webや多くの最新ソフトウェアで標準的に使われる文字コードです。通常のCSVファイルには、どの文字コードを使っているかを示す欄がないため、プログラムは推測することになります。バイトオーダーマーク(BOM)は、ファイルの先頭に置かれる3バイト(EF BB BF)です。BOMを認識するプログラムに対して、そのファイルがUTF-8であることを伝えます。BOMのないUTF-8ファイルは、WindowsのExcelが自国の文字コードで開いてしまうことがよくあります。そのため、BOMを付けるのが一般的な解決策です。

最近のExcelでは、名前を付けて保存のメニューに「CSV UTF-8」という形式があり、BOM付きで保存できます。また、「データ」→「テキストまたはCSVから」の順に選び、ファイルの元の文字コードを65001(UTF-8)に設定して読み込むこともできます。BOMには欠点もあります。BOMに対応していないプログラムは、それを1列目の列名の一部として扱うことがあります。多くのパーサーや表計算ソフトはこれを正しく処理しますが、データ取り込みツールで列名がおかしく表示される場合は、BOMを削除してください。

カンマかセミコロンか

CSVはcomma-separated values(カンマ区切りの値)の略で、RFC 4180の仕様では、フィールドはカンマで区切ると定められています。ただし、1.5のように小数点にカンマを使う国々では、Excelのリスト区切り文字がセミコロンになっていることがよくあります。そのような環境では、カンマ区切りのファイルをExcelで開くと、うまく分割されないことがあります。たとえば「1,5」という数値が2つのフィールドに分かれてしまいます。

使用するプログラムが求める区切り文字を選んでください。ExcelをCSVに変換するツールでは、カンマ、セミコロン、タブから選べます。小数点にカンマを使うロケールのプログラム向けのファイルなら、セミコロンを選ぶのが通常は安全です。

日付がシリアル値になる

Excelは日付を、基準日からの日数を表すシリアル値として保存しています。1900年の日付システムでは、1900年1月1日がシリアル値1です。さらに、Excelは1900年を閏年として扱うため、実際には存在しない1900年2月29日を数えて、シリアル値60としています。その結果、1900年3月1日はシリアル値61となり、それ以降のすべての日付が1日ずれます。このバグはLotus 1-2-3に由来し、Microsoftは互換性のために同じ仕組みを残しています。そのため、他のソフトウェアでは1900年3月1日より前の日付が1日ずれて読み込まれることがあります。

日付を書き出すと、2023-01-01ではなく44927と表示されたり、古い日付が1日ずれたりすることがあります。このツールは、日付を読みやすいテキストに変換します。手作業で書き出す場合は、日付の列を、yyyy-mm-ddというISO形式の文字列に設定してください。この形式なら、どのプログラムでも同じように読み取れます。

先頭の0が消える

郵便番号の02134は文字列ですが、Excelは入力された数字を数値として扱うため、2134と表示されます。0はシートから消え、そこから書き出されたCSVにも残りません。先頭が0の電話番号や、桁数の多いID番号も同じ問題が起きます。非常に長い数字は、Excelが約15桁の有効桁しか保持しないため、桁が失われることもあります。

データを入力または取り込む前に、これらの列を文字列として保存してください。すでに0が含まれているCSVを開く場合は、ファイルをダブルクリックするのではなく、「データ」→「テキストまたはCSVから」を使い、その列を「文字列」に設定します。

引用符のルール

RFC 4180は、一般的なCSV形式を定義しています。主な引用符のルールは次のとおりです。

  • カンマ、ダブルクォーテーション、改行を含むフィールドは、ダブルクォーテーションで囲む必要があります。
  • 引用符で囲まれたフィールド内のダブルクォーテーションは、2つ重ねて書きます。
  • 仕様では行末はCRLFですが、ほとんどのツールはLFも受け付けます。

たとえば、"Müller, Anna","She said ""ok""" という行は、Müller, Anna と She said "ok" の2つのフィールドになります。CSVのIANA登録MIMEタイプはtext/csvです。

RFC 4180では、引用符で囲まれていないフィールドの中にダブルクォーテーションを入れることは認められておらず、多くのパーサーはそのような行を拒否するか、誤って分割します。フィールドを正しく引用符で囲むか、余分な文字を削除してください。

書き出す前のチェックリスト

  1. CSV UTF-8形式で書き出します。Excelで開く場合はBOM付きにします。
  2. 使用するプログラムが求める区切り文字を選びます。
  3. 郵便番号や電話番号などのID的な列を、文字列の形式に設定します。
  4. 日付はyyyy-mm-ddの形式で書きます。
  5. テキストエディタでファイルを開き、先頭行とアクセント付きの名前のサンプルを確認します。

ノーブレークスペースなどの見えない文字も、取り込みエラーの原因になることがあります。見えない文字を削除ツールは、それらを見つけて削除します。見えない文字がどこから生じるかは、テキストに含まれる見えない文字で説明しています。ファイルがきれいになったら、CSV→JSON変換で開発者向けに変換できます。詳しくはCSVからJSONへの変換と逆変換をご覧ください。

書き出す前に、セルの内容も確認しておくと安心です。Excel数式チェッカーは、エラーを表示している数式や、別のファイルを参照している数式を一覧にします。こうしたセルは、CSVに書き出すと空になってしまいます。書き出した後は、スプレッドシートの比較で、バージョン間の変更点を確認できます。

よくある質問

同じファイルなのに、あるプログラムでは正しく、Excelでは文字化けするのはなぜですか? BOMのないUTF-8ファイルは、WindowsのExcelが自国の文字コードで読み込むことがあります。BOMを付けるか、UTF-8を選択して読み込めば解決します。

Mac版のExcelでもBOMは必要ですか? 必要だとする情報源もあるため、送信する前に、アクセント付きの名前を含むファイルで試してください。

書き出した後で日付を直せますか? まだシリアル値のままであれば直せます。ただ、最初からyyyy-mm-dd形式で書き出すほうが確実です。

変換するとき、スプレッドシートはアップロードされますか? ツールはブラウザ内で動作するため、ファイルはお使いの端末上で処理されます。この点はアップロードの確認方法で確かめられます。

英語原文をもとに、AIの支援を受けて翻訳しています。

コメント

    まだコメントはありません。最初のコメントを書いてみましょう。

    評価(任意)

    メールアドレスは表示も保存もされません。

    Open Data for AGI - Why Public, Free, and Open Datasets Matterの表紙Open Data for AGI - Why Public, Free, and Open Datasets Matter

    公開され、無料で、オープンな形式のデータセットが、アルゴリズムや計算資源と同じくらい汎用人工知能(AGI)の未来を形作る理由を解説します。

    $4.99Gumroadで入手英語版