web-dev-qa-db-ja.com

UTF8エンコーディングとUTF8-BomエンコーディングのCSVファイルのExcel保存動作

私の元のcsvファイルはUTF8-BOMでエンコードされています。これは、ExcelがUnicode文字を認識できるようにするためです(UTF8でエンコードされている場合、ExcelはUnicode文字を認識しません)。

私の問題は、UTF8でエンコードされたCSVファイルで、Excelで[保存]をクリックすると、元のフォーマットを維持するためのポップアップオプションが表示されることです。ただし、ファイルがUTF8-BOMエンコードされている場合は、保存をクリックするだけでフォーマットを維持するオプションはありません。 CSVファイルでは、カンマがタブに置き換えられます。

11
user2945722

何が起こるかは次のとおりです。

  1. Excelはシステムの地域設定を調べて、構成されているリスト区切り文字(この場合はコンマ)を見つけます。ここでは、CSV 単一の明確な形式ではない であることを指摘することが重要です。 Anyセパレータを使用できます...(編集:まあ、実際には ガイドライン があり、セパレータがコンマですが、これは拘束力のある標準ではなく、ガイドラインは実際には厳密に守られていません。)
  2. 次に、Excelはメモリ内のデータをXLSXファイルに変換します。あなたはあなたのExcel-lyのことをします。これは事実上ファイルタイプの変換であり、Excelはソースファイルのエンコーディングや使用されているセパレーターを記憶していないことに注意してください。
  3. 変更を加えて、[保存]をクリックします。その時点で、ExcelにはCSVファイルがなく、XLSXファイルがあり、それを「CSVのような」何かに変換する必要があります。エンコードはBOM付きのUTF-8である必要があることを認識しているため、「Unicodeテキスト」として保存することを決定します(これについて明示的に言及せずに行います)。この形式では、エンコーディングとしてBOMを使用し、セパレータとしてタブを使用するUCS-2 LEを使用します。これは、あなたが考えていたCSV標準、または元のファイルがフォーマットされたときの標準ではありません。奇妙で直感的ではありませんが、厳密に言うと間違っていません。

それで、あなたは何ができますか?
理論的には、[CSVとして保存]オプションを使用でき、[ツール]-> [Webオプション]メニュー([名前を付けて保存]ダイアログ内)からエンコードをUTF8に設定できます。ここでの唯一の問題は、これが適切に機能していないように見えることです。私の推測では、これは壊れた機能です。スタックオーバーフローの詳細: ExcelからCSVにUTF8エンコーディング

では、realyで何ができるでしょうか?
UTF-8 BOMを使用し、保存を使用して、結果のCSVファイルを開き、すべてのタブをカンマで置き換えます。

そして、あなたは本当にあなたが何をすべきか
Excelを使用してCSVファイルをロードおよび編集しないでください。または少なくともそれについてもっともっと注意してください...
何故なの?
私は(長すぎる) ここについての記事 と書きました。

16
Wouter