Heim  >  Artikel  >  Java  >  Beim Exportieren abgefragter Daten als CSV-Datei in Java erscheinen verstümmelte Zeichen

Beim Exportieren abgefragter Daten als CSV-Datei in Java erscheinen verstümmelte Zeichen

王林
王林Original
2019-12-04 15:46:412476Durchsuche

Beim Exportieren abgefragter Daten als CSV-Datei in Java erscheinen verstümmelte Zeichen

1. Probleme

Wenn die abgefragten Daten als XLS-Datei exportiert werden (UTF-8-Kodierung), sind die Daten normal; CSV-Datei, die verstümmelten chinesischen Zeichen sind auch in UTF-8 kodiert. Beim Export in GBK-Kodierung ist die chinesische Anzeige normal.

Ich dachte, das Problem sei gelöst, als ich später Daten mit lateinischen Zeichen (z. B. ÀÆÊàÌ) exportierte, wurden die als XLS-Datei exportierten Daten normal angezeigt Datei wurden als „?“ angezeigt.

Empfohlene Video-Tutorials: Java-Kurs

2. Die im CSV-Modus exportierte Datei enthält standardmäßig keine Stücklisteninformationen. Dieses Problem kann auftreten Das Problem kann gelöst werden, indem die BOM-Kennung (Byte-Stream beginnend mit EF BB BF) für den auszugebenden Inhalt festgelegt wird.

Die spezifische Methode lautet wie folgt:

...
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(response.getOutputStream(), "UTF-8");  
// 要输出的内容  
result = (String)contentMap.get(RESPONSE_RESULT);  
response.setHeader("Content-Disposition", "attachment;filename=test.csv");  
outputStreamWriter.write(new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF}));  
outputStreamWriter.write(result);  
outputStreamWriter.flush();

Wenn sie mit dem OutputStream-Stream implementiert wird, können die Parameter wie folgt geändert werden:

out = response.getOutputStream();     
//加上UTF-8文件的标识字符      
out.write(new byte []{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF});

Hinweis:

BOM: Byte Order Mark, Byte Order Mark (das Folgende stammt aus der Baidu-Enzyklopädie)

In der UCS-Codierung gibt es einen Code namens „Zero Width No-Break Space“, der wird ins Chinesische als „Zero Width No-Break Space“-Zeichen übersetzt, seine Codierung ist FEFF. FFFE ist ein Zeichen, das in UCS nicht existiert und daher in der tatsächlichen Übertragung nicht vorkommen sollte.

Die UCS-Spezifikation empfiehlt, dass wir vor der Übertragung des Byte-Streams die Zeichen „Zero Width No-Break Space“ übertragen. Wenn der Empfänger FEFF empfängt, bedeutet dies, dass der Byte-Stream Big-Endian ist gibt an, dass der Bytestrom Little-Endian ist.

Daher wird das Zeichen „Zero Width No-Break Space“ auch BOM genannt.

UTF-8 erfordert keine BOM zur Angabe der Bytereihenfolge, kann jedoch eine BOM zur Angabe der Codierung verwenden. Die UTF-8-Kodierung für das Zeichen „Zero Width No-Break Space“ ist EF BB BF. Wenn der Empfänger also einen Bytestrom empfängt, der mit EF BB BF beginnt, weiß er, dass dieser UTF-8-codiert ist.

Windows verwendet BOM, um die Kodierungsmethode von Textdateien zu markieren.

Empfohlene verwandte Artikel und Tutorials:

Erste Schritte beim Erlernen von Java

Das obige ist der detaillierte Inhalt vonBeim Exportieren abgefragter Daten als CSV-Datei in Java erscheinen verstümmelte Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn