【问题标题】:Java clob retrieval using getString - character encoding issue使用 getString 检索 Java Clob - 字符编码问题
【发布时间】:2009-12-01 14:42:57
【问题描述】:

所以我有一个带有表的数据库,其中一个条目是“é€áí”,我知道这在数据库中是正确的。它存储为 clob

在 Java 中,我这样检索条目:

String text = resultSet.getString(DBConstants.COL_NOTE_TEXT);

调试时,文本等于'é\u0080áí',当显示在屏幕上时,欧元符号是一个方块。

有人见过这个吗?有什么建议吗?

提前致谢。

【问题讨论】:

  • 这很有趣,因为字符 U+0080 是 Unicode 字符“”(所以它不打印也就不足为奇了)。欧元符号实际上是 U+20AC。我对为什么会发生这种情况没有实际的想法,但这可能会给你一些线索......
  • 忘记提及 - 我知道 \u0080 是欧元符号,但为什么它不只是转换为欧元符号。如果我做 text.replaceAll("\u0080", "€"),一切都是上帝。但为什么我必须这样做?干杯。
  • 哦,好的!我以为我在某个地方读到了欧元符号……好吧,更困惑!
  • 你怎么知道它在数据库中是正确的?特别是,我看到了一些相当奇怪的行为,当您尝试直接在数据库中查看文本时,使用某种奇怪的机制插入的文本实际上会正确显示,具体取决于您的设置方式。例如,如果您将客户端 NLS_LANG 设置为 UTF8,并使用不支持 UTF-8 的客户端(在我的情况下为 PL/SQL Developer 6.5)查看数据,即使不支持,它也可能看起来正确。
  • 哦,还有,你用的是什么JDBC驱动,数据库是什么版本的?

标签: java oracle character-encoding clob


【解决方案1】:

0080 是 Windows 西方编码 (cp-1252) 中的欧元字符;在 Unicode 中是 20AC。您可能需要检查输入的编码。要检查的另一件事是屏幕能够显示欧元符号。如果它会显示 '\u20AC' 则该部分已回答。

【讨论】:

  • 打败我吧,我只是在写。 :-P
  • 问题可能是数据库正在存储 cp1252 数据(在这种情况下,您将 Java 类型更改为 BLOB),或者可能与数据传输有关(必须将其编码为字节)。
【解决方案2】:

见:

oracle-jdbc-euro-character

认为这是我的问题。不过感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多