UTF-8 CSVファイルにBOM(バイトオーダーマーク)を含める必要がありますか?


37

基幹業務ソフトウェアを使用すると、ユーザーは特定のデータをCSVとして保存できます。野生ではさまざまなフォーマット(すべて「CSV」と呼ばれる)が使用されているため、「デフォルトのフォーマット」がどのように見えるかを決めようとしています。

  • 行/フィールドの区切りとエスケープについては、使用できる標準があります:RFC 4180

  • テキストエンコーディングに関して、UTF-8は過去10年で「デフォルトのテキストファイル形式」として登場したようです。そのため、これを使用します。

残っている質問は、最初にBOMを追加するかどうかです。一般にBOMの使用に関する複数の意見と賛否両論を読んでいますが、CSVファイルでのBOMの使用に関する「公式」の推奨事項または少なくとも何らかのコミュニティコンセンサスはありますか?


7
BOMがある場合、UTF-8ではありません。しかし、プログラムはどの形式を必要としますか。BOM(主にマイクロスロート)が必要な場合は、追加する必要がありますが、UTF-8 + BOM≠UTF-8です。
ctrl-alt-delor

3
CSVは明らかに簡単に生成できますが、特に純粋な7ビットASCIIから外れている場合、互換性の問題が非常に多くあります。 Excelで(他のソフトウェアに再インポートするのではなく、その場合、セパレーター、エンコードなどのオプションを指定する必要があります)。ほとんどの言語用のライブラリがあり、あなたとあなたのユーザーを多くの時間を節約できます。
-jcaron

2
CSVを使用する場合は、MacとPCの両方でファイルを開くとどうなるかを確認してください。理想的には、いくつかのバージョンのExcelを使用します。また、ファイルをダブルクリックして開いたり、メニューからファイルを開いたりしても、Excelの一部のバージョンは同じように動作しないことに注意してください。
jcaron

2
Excelで正しく開く場合、なぜ重要なのですか?質問には、Excelが生成されたファイルを解析できる必要があることを示すものはありません
...-rubenvb

回答:


55

UTF-8はありませんが、コメントのさまざまな注意事項を参照してください。

UTF-16 / 32とは異なり、Unicode標準では推奨されないため、これは不要です(UTF-8にはバイト順がありません)。また、BOMを含むUTF-8が「インザワイルド」と表示されることは非常にまれであるため、正当な理由がない限り(たとえば、コメントされているように、BOMを期待するソフ​​トウェアで作業している場合)、BOMなしのアプローチをお勧めします。

ウィキペディアでは、主にBOMを強制的に使用するMicrosoftソフトウェアについて言及していますが、BOMを使用しているのでない限り、使用しないでください。


28
BOMを必要とする広範なソフトウェアもあります。Excelでは、CSVファイルを「ANSI」ではなくUTF-8(つまり、ローカル互換性ロケール)として正しく識別するためにBOMが必要です。(ただし、Excelはこのようなファイルを保存するときに奇妙なことをするため、Excelでファイルを開く場合は、CSVエクスポートではなく「実際の」Excelエクスポートを使用することをお勧めします。)
Heinzi

21
@Heinziずっと前に、CSVとExcelで作業していると本当に勝てないことを学びました。それは単にひどいCSVリーダーです。残念なことに、それは通常のユーザーが期待するものです。
パイプ

9
@Voo:UTF-8のBOMを要求することは、「必須でも推奨でもない」ことを考慮して、確かに標準に違反します。
デュプリケータ

12
@Deduplicator:MS-DOSおよびWindowsシステムには、UTF-8以外のエンコーディングのレガシーテキストファイルの大規模なベースがあります。品質アプリケーションでは、ユーザーはテキストファイルを開くときにエンコードする方法を指定できますが、多くの場合「自動」オプションが含まれます。ユーザーが「UTF-8」を選択すると、BOMの有無にかかわらずUTF-8ファイルが正しく開かれます。ユーザーが「自動」を選択すると、BOMを持たない一部のUTF-8ファイルが他のエンコーディングを使用していると誤認される場合があります。私は...確か「誤認」されているファイルはビット単位で同一である可能性があるため1は、異なっ行うためのアプリケーションを期待するものではありませんよ
supercat

7
@Voo:これは、BOMが違法である他の多くの形式固有の要件と矛盾します。たとえば、BOMが前にあるシェルスクリプト#!は無効です。せいぜいUTF-8のBOMは「フォーマット/アプリケーション固有の要件がそれを除外しない場合に許可」され、「許可」ではないため、使用すべきではありません。標準は、実際にはSHOULD NOTについて明確です。
R ..

8

広く普及している慣習はまだありませんが、UTF-8が現在一般的に受け入れられています。

BOMはひどいアーティファクトです:

不可視です(幅がゼロのスペース)。

一部のソフトウェアは、文字だけでなく、その前にある奇妙なBOMを含む最初の列名で壊れる場合があります。

ヘッダー行は、最初の値を破損する値行の場合にコピーされることがあります。

一部のWindowsソフトウェアでは、そのローカルWindowsマシンで使用されているANSIエンコーディングの1つとUTF-8を区別する必要があるだけです。メモ帳、Excel。

悲しいことに、BOMをサポートする必要があります。たぶんオプションです。

ファイルの命名スキームを使用します(...- utf8.txt、...- utf8bom.txt)。


多くの場合、エクスポートの代替手段としてHTMLを使用できます。これにより、ファイルのエンコーディングを設定できます。追加の機能は、行とセルの背景/前景の色付けです。これにより、エクスポートの品質が向上します。


15
フォーマットが「エクスポートの品質を高める」かどうかは、ファイルの使用目的に大きく依存します。CSVは多くの場合、単純な機械可読形式として使用されます。その場合、受信者がHTMLを解析することは大きな欠点になります。
IMSoP

5
命名スキームを選択する場合は、視聴者に留意してください。-utf8-windows.csv優れている。ほとんどの人は、コンピューターのコンテキストでWindowsが何であるかを知っていますが、バイトオーダーマークが何であるかを知っているユーザーははるかに少ないです。
–MSalters

2
@Davislorはい、広く知られている既知の標準である場合。そうしないと、エラーレポートがtschüßガベージであるtschüßことが示されますが、書き込まれるべきです。StackOverflowでは、多くのITエラーはエンコーディングに関するものです。エンドユーザーにも問題が発生します。
ヨープエッゲン

3
@JoopEggen「広く知られている既知の標準」は、どのコミュニティで正確に?私はもう10年近くソフトウェア開発を行ってきましたが、それを見たことはありません-Windowsでも、あなたがほとんど常にutf-8を扱うLinuxやOSX でもそうではありません。
キュービック

1
@JustinTimeはい、数年前からでもありますが、それ以前ではありません。MS開発者はそれほど悪くはありません(Posix準拠、現在はUTF-8サポート)。
ヨープエッゲン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.