Oracle11g 为什么一个AL32UTF8字符不显示I-Acute,而另一个显示tilde-N?

Oracle11g 为什么一个AL32UTF8字符不显示I-Acute,而另一个显示tilde-N?,oracle11g,character-encoding,Oracle11g,Character Encoding,我的Oracle 11g配置了AL32UTF8 NLS\U字符集AL32UTF8 为什么第二条记录中的tilde-N显示为tilde-N,而Acute-I和K显示为tilde-N 在第一条记录中不显示ACURE-I和K 其他信息: 重音-I的十六进制代码为CD 当我从转储中获取十六进制代码并使用UNISTR()对其进行转换时,字符显示时带有重音 select unistr('\0052\0045\0059\004B\004A\0041\0056\00CD\004B')

我的Oracle 11g配置了AL32UTF8

NLS\U字符集AL32UTF8

为什么第二条记录中的tilde-N显示为tilde-N,而Acute-I和K显示为tilde-N 在第一条记录中不显示ACURE-I和K

其他信息: 重音-I的十六进制代码为CD 当我从转储中获取十六进制代码并使用
UNISTR()
对其进行转换时,字符显示时带有重音

     select 
     unistr('\0052\0045\0059\004B\004A\0041\0056\00CD\004B') 
     as hex_to_unicode
  from dual;

这可能是您用来显示结果的客户端(而不是数据库)的问题。你在用什么

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

编辑:

好的,我很确定你的数据是错误的。你在说什么 ,即Unicode代码点U+00CD。这与字节0xCD不同。您使用的是数据库字符集AL32UTF8,它使用UTF-8编码。U+00CD字符的正确UTF-8编码为双字节序列0xC38D

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

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


此处演示:

您的客户端工具是否将字体设置为显示ACURE-I和K?eaolson:谢谢你的回复。当我通过UNISTR运行十六进制字符时,客户端TOAD呈现了这个字符。