2012-04-13 36 views
7

opencsvを使用すると非常に迷惑なエンコードの問題があります。 csvファイルを書き出すときに、文字の種類を「UTF-8」に設定しました。opencsv utf-8を使用しているCSVWriterが複数の言語で動作しないようです

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

が、私は、Microsoft Office Excel 2007でCSVファイルを開くと、それは'UTF-8 BOM'エンコーディングを持っていることが判明?

ファイルをメモ帳に保存してもう一度開くと、ファイルはUTF-8に戻り、その中のすべての文字が正常に表示されます。 私は十分に調査したと思いますが、ファイルが「UTF-8 BOM」にならないようにするための解決策はありませんでした。任意のアイデアをしてください。

+1

Javaは、独自のBOMを追加するべきではありません.2つの文字列を取る 'OutputStreamWriter'コンストラクタもないので、あなたのコードには何かがありません。あなたが書いたデータの一部にBOMを含めることはできますか? –

答えて

13

ファイルに「BOMなしのUTF-8」エンコーディングがあるとします。 BOMエンコーディングは、ほとんどの場合は不要ですが、msExcelに対処する場合は1つの明白な例外があります。

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

あなたのファイルはutf-8 csvとしてExcelで認識されます。

+0

ms対応の問題は何ですか? –

+0

これは長年にわたって私にとって本当の迷惑でした!あなたのソリューションは完璧に機能します。ありがとう – Ashley

2

UTF-8UTF-8 Signature(間違って「UTF-8 BOM」という名前が付けられています)は同じエンコードであり、署名はis used only to distinguish it from any other encodingsです。すべてのUnicodeアプリケーションは、UTF-8シグネチャ(3バイトのシーケンスEF BB BF)を正しく処理する必要があります。

Javaがこのシグネチャを具体的に追加する理由とわからないことをやめる方法

関連する問題