编码(Encode)和解码(Decode)是两个相反的动作。编码是把字符按照某种映射标准(字符集),转换成字节,这时我们把执行编码动作时所采用的标准叫编码(encoding)。如我们对Unicode字符串”我是中国人”按照GB2312标准编码(byte bsg[] = ”我是中国人”.getBytes(“GB2312”);),就可以得到一个字节序列(bytes sequence),用十六进制的码值表示:0xCE0xD20xCA0xC70xD60xD00xB90xFA0xC80xCB按照UTF-8标准编码(byte bsu[] = ”我是中国人”.getBytes(“UTF-8”);),就可以得到字节序列:0xE60x880x910xE60x980xAF0xE40xB80xAD0xE50x9B0xBD0xE40xBA0xBA而解码则是将字节序列按照某种字符标准(解码,decoding),转换成字符串。如我们对字节序列:0xCE0xD20xCA0xC70xD60xD00xB90xFA0xC80xCB按照GB2312解码(new String(bsg,”GB2312”),或对字节序列:0xE60x880x910xE60x980xAF0xE40xB80xAD0xE50x9B0xBD0xE40xBA0xBA按照UTF-8解码(new String(bsu,”UTF-8”),均可得到字符串”我是中国人”,但是如果我们对GB2312编码的字节序列用UTF-8解码,这就乱了套,所得的字符串明显是错误的乱码。

解决方案 »

  1.   

    GBString=new String(UnicodeString.getBytes(),"GB2312");
      

  2.   

    今天休息不知道有没有高人在
    我的问题是一个UNICODE数组,不知道数组有多长
    是动态的
    它4位是一个汉字,我现在要把它专化过来
    !!!!!!!!
    急!!!!!!!!
      

  3.   

    ABC
    123
    是可行的
    汉字不认
      

  4.   

    可能是bigendian和littleendian 的问题,可以变换一下高位,低位试试
      

  5.   

    有可能bytes中就已经不是Unicode了, 可以将byte的十六进制打出来, 按一楼的方法分析GBString=new String(byteArray,"GB2312");