【发布时间】:2011-05-22 02:35:28
【问题描述】:
我的 oracle 数据库有一个 UTF8 字符集。 我有一个 Java 存储过程,它从表中获取记录并创建一个 csv 文件。
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");
如果我使用上面的代码,德文字符(从表中获取)在 csv 中会变成乱码。但是如果我将编码更改为使用ISO-8859-1,那么我可以在csv文件中正确地看到德语字符。
PrintStream out = new PrintStream(zipOut,false,"ISO-8859-1");
我读过一些帖子说我们应该使用 UTF8,因为它是安全的,并且还能正确编码其他语言(中文等),而 ISO-8859-1 将无法这样做。
请建议我应该使用哪种编码。 (将来我们很有可能将中文/日文单词存储在表中。)
【问题讨论】:
-
有些东西没有加起来。您声称数据库将文本存储为 UTF-8,但是当您以 UTF-8 写出文本时,它是乱码;它必须用 ISO-8859-1 写出来才能阅读。这似乎是一个非常明显的证据,表明数据库的文本不是以 UTF-8 而是以 ISO-8859-1 存储的。
-
我检查了数据库的 NLS_CHARACTERSET,它的值为 UTF8。一件有趣的事,我可以用记事本打开 csv,我可以正确地看到这些字符。
-
已解决。请检查此link
标签: java character-encoding oracle10g