13

opencsvを使用すると、エンコードに非常に厄介な問題が発生します。csvファイルをエクスポートするとき、文字タイプを「UTF-8」に設定します。

CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8"));

しかし、Microsoft Office Excel 2007でcsvファイルを開くと、「UTF-8BOM」エンコーディングであることがわかりますか?

ファイルをメモ帳に保存して再度開くと、ファイルはUTF-8に戻り、その中のすべての文字が正常に表示されます。十分に検索したと思いますが、ファイルが「UTF-8BOM」になるのを防ぐための解決策は見つかりませんでした。何かアイデアはありますか?

4

2 に答える 2

25

あなたのファイルには「BOMなしのUTF-8」エンコーディングが含まれていると思います。ほとんどの場合必要ではありませんが、BOM エンコーディングをファイルにフィードすることをお勧めしますが、1 つの明らかな例外は ms Excel を扱う場合です。

FileOutputStream os = new FileOutputStream(file);
os.write(0xef);
os.write(0xbb);
os.write(0xbf);
CSVWriter csvWrite = new CSVWriter(new OutputStreamWriter(os));

これで、ファイルは Excel によって utf-8 csv として認識されます。

于 2014-07-14T04:21:22.823 に答える
3

UTF-8UTF-8 Signature(誤って と呼ばれることもありますUTF-8 BOM) は同じエンコーディングであり、署名は他のエンコーディングと区別するためだけに使用されます。Unicode アプリケーションは、UTF-8 署名 (3 バイト シーケンスEF BB BF) を正しく処理する必要があります。

Java がこの署名を具体的に追加する理由と、それを停止する方法がわかりません。

于 2012-04-13T07:01:38.147 に答える