2012-04-13 6 views
7

Ich habe eine sehr lästige Codierung Problem mit opencsv. Wenn ich eine CSV-Datei exportieren, setze ich den Zeichentyp als 'UTF-8'.opencsv CSVWriter mit utf-8 scheint nicht für mehrere Sprachen zu funktionieren

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

aber wenn ich die CSV-Datei mit Microsoft Office Excel 2007 öffnen, es stellt sich heraus, dass es 'UTF-8 BOM' Codierung hat?

Sobald ich die Datei im Editor speichern und erneut öffnen, kehrt die Datei zurück zu UTF-8 und alle darin enthaltenen Buchstaben erscheinen gut. Ich glaube, ich habe genug gesucht, aber ich habe keine Lösung gefunden, um zu verhindern, dass meine Datei zu 'UTF-8 BOM' wird. irgendwelche Ideen, bitte?

+1

Java sollte keine eigene Stückliste hinzufügen, da es auch keinen 'OutputStreamWriter'-Konstruktor gibt, der zwei Strings nimmt. Ich nehme an, dass etwas in Ihrem Code fehlt. Könnte die Stückliste Teil der Daten sein, die Sie schreiben? –

Antwort

13

Ich nehme an, Ihre Datei hat eine 'UTF-8 ohne BOM' Codierung. Sie besser BOM-Codierung in Ihre Datei, obwohl es in den meisten Fällen nicht notwendig ist, aber nur eine offensichtliche Ausnahme ist, wenn Sie mit MS Excel beschäftigen.

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

Jetzt wird Ihre Datei von Excel als UTF-8 CSV verstanden werden.

+0

Was ist das Problem im Umgang mit MS Excel? –

+0

Das ist mir seit Jahren ein echtes Ärgernis! Ihre Lösung funktioniert perfekt. Vielen Dank – Ashley

2

UTF-8 und UTF-8 Signature (die manchmal falsch als UTF-8 BOM bezeichnet) sind die gleichen Codierungen und Signatur is used only to distinguish it from any other encodings. Jede Unicode-Anwendung sollte die UTF-8-Signatur (die aus drei Bytes der Sequenz EF BB BF besteht) korrekt verarbeiten.

Warum Java speziell diese Signatur hinzufügt und wie man es stoppt, weiß ich nicht.