今天在打印所有UTF-8编码字符时发现一个奇怪的现象,0xEDA080-0xEDBFBF之间的编码用Encoding.UTF8.GetString()转换时得到两个0xEFBFBD字符。很奇怪。google了一下也没发现0xEFBFBD有啥特殊的含义,谁知道这是怎么回事?
byte[] buffer;
string text; buffer = new byte[3];
buffer[0] = 0xED;
buffer[1] = 0xA0;
buffer[2] = 0x80; text = Encoding.UTF8.GetString(buffer);

解决方案 »

  1.   

    乱码研究之锟斤拷的故事
    乱码里经常会看到“锟斤拷”
    而且经常是连在一起的很多“锟斤拷”
    这种乱码基本就没的救了究其根源,这三个字来自于unicode字符集里的0xFFFD字符
    http://www.unicode.org/charts/PDF/UFFF0.pdf
    这个字符是replacement character
    用来代替unicode无法表示的字符
    所以出现这个字符的时候,说明这一步的转换已经就出问题了0xFFFD的UTF-8表达形式是0xEFBFBD
    如果有两个以上的这个字符,当它被当作gb码被转成utf8的时候,就出现了“锟斤拷”
    也就是(in gb encoding):0xEFBF 0xBDEF 0xBFBD
      

  2.   

    确实是在转换的过程出现的问题 但是奇怪的是一个合法的utf-8编码为什么转换会出问题呢?我打印了全部的utf-8字符 发现只有0xEDA080-0xEDBFBF这一段有这个现象。
      

  3.   

    你所在的unicode区域是不是代理对区域 该区域有高部和低部 组合成对出现