从来自数据库的NCR值中检索值作为字符

时间:2016-01-12 17:36:58

标签: java java-ee jdbc oracle11g resultset

我面临的问题是从结果集中检索值作为字符。结果集以NCR格式显示值(例如;台北)而不是字符(例如:台北)。我不知道如何从resultSet中获取字符。

我从resultSet

获得价值
           while (resultSet.next()) {
                          resultSet.getString(1); // this value is coming as NCR / or some other text
                   }

我尝试了一种方法,但我遇到了问题

public static String ConvertDecimalNCRToString(String hex)
{
    String myString = hex.replace("&#", "");
    String[] split = myString.split(";");
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < split.length; i++) 
    {
        sb.append((char)Integer.parseInt(split[i]));
    }
    return sb.toString();
}

如果我的字符串是“&amp;#21488;&amp;#21271;”然后程序运行正常,但字符串可以包含其他值以及NCR值,如“stre1234&amp;#21488;&amp;#21271;”在这种情况下,上述方法失败。任何人都可以建议一些好方法来实现它。我还想知道是否有其他方法可以直接从resultSet而不是NCR值中获取字符值?

先谢谢!! !!

1 个答案:

答案 0 :(得分:0)

如果您的数据存储了数字字符引用,则可以使用the UTL_I18N.UNESCAPE_REFERENCE function将这些数据作为查询的一部分转换回字符:

select utl_i18n.unescape_reference('Test mixing &#21488;&#21271; with plain text')
from dual;

UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')         
--------------------------------------------------------------------------------
Test mixing 台北 with plain text                                                

当然,您的客户端需要能够处理Unicode字符,并且您的会话也需要兼容。例如,在具有export LANG="en_US.iso8859-1"export NLS_LANG="ENGLISH_AMERICA.US7ASCII"的Linux PuTTY会话中,通过SQL * Plus运行的查询显示:

UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')
------------------------------------------------------------------------------------------------------------------------
Test mixing ?? with plain text

更改export NLS_LANG="ENGLISH_AMERICA.UTF8"获取:

UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING&#21488;&#21271;WITHPLAINTEXT')
------------------------------------------------------------------------------------------------------------------------
Test mixing 台北 with plain text

如果我通过Java程序运行相同的查询,我得到:

Test mixing ?? with plain text

使用export LANG="en_US.utf8"(或者说,ja_JP.utf8)获取:

Test mixing 台北 with plain text

其他客户可能需要不同的设置,例如操作系统或Java语言环境。 You can read more in the globalisation guide

您可能还想检查存储的值是否真的应该首先转义。