(GBK 编码) 一个字节数组 ,结尾是完整的,但是开头有可能出现半个字符,就是乱码,怎样判断字符数组的开头是否是个不完整的字符,

解决方案 »

  1.   

    英文字符以GBK编码时只占一个字节或二字节(编码大于128小于256的英文字符,估计是全角的吧),编码小于等于128的 
    字符GBK字符与Unicode编码兼容,中文字符以GBK编码时,占两个字节也就说不管当汉字或全角英文的时候是双字节表示,普通英文是单字节这样我们就有了个思路遍历这个字节数组,在遍历过程中判断字节范围是否是0-127 如果不是就累加1 直到遇到 值为0-127就break掉;这时候判断累加的值 如果是偶数,那说明前面的字符串都是完整的双字节的,那就没有半个字符串的情况存在如果是奇数,那就有可能有半个字符串的情况存在了
      

  2.   


    问题的主要难点在于 ASCII 与 GBK第二字节 是存在重叠的。所以如果第一个字节比如说是:0x64,无法判断其究竟是出错只剩半个汉字,还是本来就正确的ASCII。
      

  3.   


    那就没办法了,因为一个gbk的单字节用 高低位也有重叠的,也无法判断这个字节是否是高位还是低位字节看来比想象中的难坐等高手,支招~~~~
      

  4.   


    这楼主估计是被逼急了,之前已经发过一个帖子:
      http://topic.csdn.net/u/20120925/15/39e9745a-f2a3-4612-946c-40be76c7e57b.html但GBK层面确实没有好的方法能“一定”判断出是否有问题。唯一的招数恐怕是基于“语义”层面的
    另外,如果将其转换为字符串(new String(bytes, "GBK"))发现无法匹配字符时,对应位置会生成“�”。
      

  5.   

    因为一个类似的问题,我把我所有的项目都转成utf编码了
      

  6.   

    要打扫卫生放假了,没有细看你的问题,看下这个帖子http://daimojingdeyu.iteye.com/blog/397661Java读带有BOM的UTF-8文件乱码原因及解决方法 
      

  7.   

    utf-8编码容易判断 ,问题是GBK怎么判断,或者让它判断的错误率最小也行,一般常用字不出错就行,有这样的办法吗?
      

  8.   

    第一个字节如果是0x64的话,就当ASCII码来解了
    对字符解析机制来讲,毫无问题
    不知道楼主的真正需求是啥,要解决也应该不是在这个范围解决。如果是属于汉字的一个字节又怎么会单独出现呢,应该解决这个问题。
      

  9.   

    我的需求就是,一个字节数组(肯定是GBK的) 怎么判断这个数组是否包含半个字符也就是乱码的情况,不能完美的判断的话,怎样才能做到判断的成功率最大, 
      

  10.   

    首先确认下字节范围
    ASCII字符(单字节):00–7FGBK字符(双字节)首字节:81–FE
    GBK字符(双字节)尾字节:40–FE except 7F
    所以一组字符串只有串首是非汉字字符,可以研究该字符的字节(可从字节推测哪些汉字,对照gbk码表)和ldh说的语义层面的比如汉字的含义推断串首可能的汉字,结合这两点再加上字符范围来推断串首是否可能是汉字和是哪个汉字。