如何在 Java 中添加 UTF-8 BOM?

新手上路,请多包涵

我有一个 Java 存储过程,它使用 Resultset 对象从表中获取记录并创建一个 CS Vfile。

 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数据库还有一个 NLS_CHARACTERSET UTF8的值。

请建议。

原文由 Fadd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 888
2 个回答

要用 UTF-8 编写 BOM,您需要 PrintStream.print() ,而不是 PrintStream.write()

此外,如果您想在 csv 文件中包含 BOM,我想您需要在 putNextEntry() 之后打印 BOM。

原文由 axtavt 发布,翻译遵循 CC BY-SA 2.5 许可协议

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(...), StandardCharsets.UTF_8));
out.write('\ufeff');
out.write(...);

这会正确地将 0xEF 0xBB 0xBF 写入文件,这是 BOM 的 UTF-8 表示形式。

原文由 astro 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题