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});
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 JavaDas 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!