请教一个字节数组的问题!!!!!
(GBK 编码) 一个字节数组 ,结尾是完整的,但是开头有可能出现半个字符,就是乱码,怎样判断字符数组的开头是否是个不完整的字符, --------------------编程问答-------------------- 拆分成BYTE然后解码判断 --------------------编程问答-------------------- 晕,已经是BYTE数组了,现在就是怎么判断的问题 --------------------编程问答-------------------- 一个比较土的方式,从后往前判断每个字节,如果是非汉字,则该值大于0,只占一个字节;如果是汉字,则每个字节都是小于0,必须连续占两个字节才算完整。你按这个规则从后往前推,如果匹配完刚好,则没有出现半个字节的情况,反之第一个字节为半个字符 --------------------编程问答-------------------- 没有绝对有效的办法,只能用这个规则来大致判断:“GBK采用双字节表示,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间”
所以,如果你发现第一个字节如果小于 0x81,说明其应该是尾字节。
那么以此推论的话,假设你发现 0、2、4、6、8 下标的byte,小于0x81,说明很可能错位了半个字符。
更准确的直接判定方式就没有了。 --------------------编程问答-------------------- 需要具体的判断方法,比如非汉字,如何判断等
--------------------编程问答-------------------- 关键是 第二字节会和asc吗有重复范围,这样岂不是无法判断了 --------------------编程问答-------------------- 如果我第一个字节就在这个重复范围内,那我不是无法判断是asc,还是半个字符吗,GBK这么坑爹吗 --------------------编程问答-------------------- 加密吧,什么编码都是浮云 --------------------编程问答-------------------- 啥加密啊,是要显示出字符的,各位高人,难道没办法了?世界难题? --------------------编程问答-------------------- 比如你已经转吧字符换成0x81了,按自己设定好的密匙,在后面加上xxx,传送后,再按规律截取0x81,再转换为字符就可以了 --------------------编程问答--------------------
实际上它就是这么坑爹。从你的想法来说,用UTF-8会比较好些;它可以识别出该byte是否是完整的。
另外,如果你非常需要可靠传输,可以考虑在传输之前每个有效字符直接插入分割符,比如:0x0 --------------------编程问答-------------------- 这个内容是别人那取来的,不能由我控制编码,无法判断出来,岂不是悲剧,给我十万保安,统一世界编码 --------------------编程问答--------------------
基本无解。。。
补充:Java , Java EE