我数据库是oracle9i的,数据库字符集是AMERICAN_AMERICA.WE8MSWIN1252。我在java代码里在中文数据插入数据库之前将中文数据做过GBK到ISO8859_1的转码,一般中文都没问题,能顺利插入数据库。在读数据库时在做过ISO8859_1到GBK的转码也能顺利读出。但“珣”字这种生僻字就会出问题,“珣”的ISO8859_1编码为AB91但插入到oracle后就变成了ABBF,所以读的时候再转码就读不出来了。是不是oracle的AMERICAN_AMERICA.WE8MSWIN1252字符集和ISO8859_1还是又不相同的地方呀?小弟对oracle字符集还不太熟悉,那位大仙帮帮忙呀!

解决方案 »

  1.   

    那最好把字符集改为ZHS16GBK,估计就没有问题了,也少得转来转去浪费系统性能。
      

  2.   

    ORACLE 字符集除CHARACTER外还有 NATIONAL CHARACTER ,一般默认为UTF16, UTF8,储存所有的汉字都没有问题。
      

  3.   

    这个似乎你得查一下java中相对应于这种字符集的转换方式了.iso8859_1可能是不包含这个字符. 你最好是找一与we相容的.
      

  4.   

    归根到底还是字符集兼容问题
    ISO8859-1 是单字节英文字符集,只有192个字符,0x00-0x1F、0x7F、0x80-0x9F在此字符集中未有定义。(控制字符是由ISO 6429及ISO 4873定义)。 
    你那个 "“珣”的ISO8859_1编码为AB91"
    的 91 ISO8859_1里面根本没有定义。不知道你怎么转的另外从GBK的范围看ISO8859在第一个字节会有未定义部分,硬转会有问题是正常的
    GBK范围:
    1st byte | 2nd byte
    0×81~0xfe | 0×40~0×7e and 0×80~0xfe
    如果字符集不能改,参考3楼的用nchar 或nvchar吧