web-dev-qa-db-ja.com

ExcelでCSVタイプのファイルを保存すると常にBOMが削除される

私は、ExcelがデフォルトでファイルをCSVタイプに保存するときにBOMを削除するように設定されている理由を見つけるために(失敗して)適切な解決策/説明を見つけようとしました。

これが this 質問の重複である場合は、ご容赦ください。これは非ASCIIエンコーディングのCSVファイルの読み取りを処理しますが、ファイルの保存を取り消すことはできません(これが最大の問題です)。

これが私の現在の状況です(私が収集するのは、Unicode文字とCSV形式を扱うローカライズされたソフトウェアの間で一般的です)。

  • UTF-16LEを使用してデータをCSV形式にエクスポートし、BOMが設定されていることを確認します(0xFFFE)。ファイルが16進エディターで生成された後、それが正しく設定されていることを確認します。

  • Excelでファイルを開き(この例では、日本語の文字をエクスポートしています)、Excelが正しいエンコーディングでファイルを読み込んでいることを確認します。

  • このファイルを保存しようとすると、Unicodeエンコーディングと互換性のない機能がファイルに含まれている可能性があることを示す警告メッセージが表示されますが、保存するかどうかを尋ねられます。

  • [名前を付けて保存]ダイアログを選択すると、すぐにファイルをCSVではなく「Unicodeテキスト」として保存するように求められます。 「CSV」拡張子を選択してファイルを保存すると、BOMが削除されます(もちろん、すべての日本語文字が削除されます)。

なぜこれが起こるのでしょうか?この問題の解決策はありますか、またはこれはExcelの既知の「バグ」/制限ですか?

さらに、(副次的な問題として)UTF-16LEでエンコードされたCSVファイルをロードするときに、ExcelはTAB区切り文字のみを使用するようです。繰り返しますが、これは別の既知の「バグ」/ Excelの制限ですか?

15
rickp

「ExcelがXを実行する理由」という形式の質問に対する丁寧な回答はありません。

標準の転送形式として「Unicodeテキストとして保存」を採用しないのはなぜですか? Excel Save asはBOMがあることを確認し、区切り文字としてTABを使用し、CSVのようにフィールドを引用します...

ちなみに、「CSV拡張子を選択」する必要はありません。フォーマットと拡張子の2つの選択肢があります。 [ファイルの種類]ボックスでUnicodeテキストとして保存して、[ファイル名]ボックスの拡張子をcsvに手動で変更してみてください。次に、Excelを終了し、Windowsエクスプローラーでファイル名をダブルクリックします。うまく開きます。それを試してみてください。

OPのコメントを議論するための更新

  • 「Excelテキストで保存」(Excel 2007の場合)では、常にファイルをテキスト拡張子として保存します(以前のバージョンや新しいバージョンは読み込めません)。それが「ファイルの種類として保存」のアイデアです...

=>私が上に書いたものを注意深く読み、あなた自身のためにそれを試してください。 TXT拡張子それを上書きしない限りでファイルを常に保存します:==:[ファイル名]ボックスでtxtを削除し、csvと入力します。

  • 「ExcelにBOMがあることを確認して保存」を明確にすることは正しくありません。

=> "名前を付けて保存nicode text"は、ファイルの先頭にUTF-16LE BOMがあることを確認します。試してみてください。

  • そもそも私が質問した理由です! BOMを含むCSV形式のファイルを開いて、ファイルのエンコーディングがUFT-16LEであることを示し、このファイルをExcelで変更した場合、このファイルを保存すると、エンコーディングが変更されないことが予想されます...

=>そして、Excelは入力CSVファイルに関する情報を保持しないため、期待は満たされません。やりたいことを強制する方法はありません。だから、あなたはあきらめるか、私が提案しているような何か他のものを試してみてください。

  • 本当にいいのは、これらの問題を以前に経験したことがある人です。洞察を提供してください。

=>私は数年前に中国のデータとExcel 1997でこれらの問題を経験しました。あなたの質問に答える前に、Excel 2003とExcel 2007でExcelの動作がまだ悪いことを確認しました。 「種類として保存= Unicodeテキスト、拡張子= CSV」の回避策が実際に機能することを確認しました。私は私の洞察を提供しました。

6
John Machin