为什么一个AL32UTF8字符不显示I-Acute,而另一个显示波形符号-N?

时间:2018-03-08 20:23:20

标签: oracle11g character-encoding

我的Oracle 11g配置了AL32UTF8

AuditReader

为什么tilde-N在第二个记录中显示为tilde-N,但是在Acute-I和K中显示 在第一张唱片中不显示Acute-I和K?

multibyte

其他信息: Accent-I的十六进制代码是 CD enter image description here 当我从转储中获取HEX代码并使用NLS_CHARACTERSET AL32UTF8转换它时,字符会显示重音。

UNISTR()

1 个答案:

答案 0 :(得分:1)

这可能是您使用任何客户端显示结果而不是数据库的问题。你在用什么?

您可以使用DUMP功能检查数据库结果是否正确。如果表中的值具有数据库字符集的正确字节序列,那么您就是好的。

修改

好的,我很确定您的数据不好。你在谈论 LATIN CAPITAL LETTER I WITH ACUTE,即Unicode 代码点 U + 00CD。这与字节0xCD不同。您正在使用数据库字符集AL32UTF8,它使用UTF-8编码。 U + 00CD字符的正确UTF-8编码是双字节序列0xC38D。

你所拥有的是UTF-8字节序列0xCD4B,我很确定无效。

Oracle UNISTR函数采用UCS-2编码的代码点,与UTF-16大致相同,而不是UTF-8。

此处示范:http://sqlfiddle.com/#!4/7e9d1f/1