我有一個Java存儲過程,它使用Resultset對象從表中提取記錄並創建一個csv文件。如何在java中添加UTF-8 BOM
BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
retBLOB.open(BLOB.MODE_READWRITE);
OutputStream bOut = retBLOB.setBinaryStream(0L);
ZipOutputStream zipOut = new ZipOutputStream(bOut);
PrintStream out = new PrintStream(zipOut,false,"UTF-8");
out.write('\ufeff');
out.flush();
zipOut.putNextEntry(new ZipEntry("filename.csv"));
while (rs.next()){
out.print("\"" + rs.getString(i) + "\"");
out.print(",");
}
out.flush();
zipOut.closeEntry();
zipOut.close();
retBLOB.close();
return retBLOB;
但生成的csv文件沒有顯示正確的德文字符。 Oracle數據庫還具有UTF8的NLS_CHARACTERSET值。
請建議。
如果您以前沒有遇到過這種情況,請注意,Unicode標準不要求或推薦使用帶有UTF-8的BOM。這也不是非法的,但不應該不加選擇地使用。有關詳細信息,請參閱[此處](http://unicode.org/faq/utf_bom.html#BOM),其中包含有關何時何地使用它的一些準則。如果您嘗試在Windows中查看csv文件,這可能是對BOM的有效使用。 – 2010-12-08 15:16:25
是的,我們正試圖在Windows中查看csv,但生成的csv仍然顯示德語字符的亂碼。這是設置BOM的正確方法嗎? – Fadd 2010-12-08 15:20:43
是的,沒錯。 Unicode標準建議使用UTF-8使用所謂的BOM(它不是真正的)來反對**。 – tchrist 2010-12-08 17:05:35