我面临的问题是从结果集中检索值作为字符。结果集以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值中获取字符值?
先谢谢!! !!
答案 0 :(得分:0)
如果您的数据存储了数字字符引用,则可以使用the UTL_I18N.UNESCAPE_REFERENCE function将这些数据作为查询的一部分转换回字符:
select utl_i18n.unescape_reference('Test mixing 台北 with plain text')
from dual;
UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING台北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台北WITHPLAINTEXT')
------------------------------------------------------------------------------------------------------------------------
Test mixing ?? with plain text
更改export NLS_LANG="ENGLISH_AMERICA.UTF8"
获取:
UTL_I18N.UNESCAPE_REFERENCE('TESTMIXING台北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
您可能还想检查存储的值是否真的应该首先转义。