这个问题我苦苦思索很久了,一直没有想到有什么解决方案希望求助于大家的力量 能帮我解决这个难题

来源:百度知道 编辑:UC知道 时间:2024/06/10 07:41:14
如果在一个gb2312或gbk编码的文本里面,将一个文件指针任意滑动到一个随机位置,怎么判断当前字节是一个汉字的后一半或者是前一半呢?
--
附,抛开GBK编码不说,判断是否为西文字符倒是十分简单,但是对于中国这种双字节编码的文本来说,就很有难度了,因为不能提前遍历,给定的条件就是一个随机的位置,所以有可能出现在读取的当前字节为一个汉字编码的首字节(这样为正确的情况),但也有可能为其尾字节(这样势必出现乱码)。在gb2312中汉字编码都是大于0xA0A0的。
当然折中的办法是可以通过肉眼观察法,发现乱码手动偏移一个位置,但目前我很想讨论下自动校正位置的可能性是否可行,谢谢大家!

其实你可以想象成根肉眼观察一样,之所以出现乱码,是因为它超出了正常的汉字编码,那么你根据正常汉字编码的数据范围,就知道了它是不是乱码了,其实就是根据这个范围来定的,出现了不在这个范围的就认为是乱码了,
我觉得还是要根据 靠闭着眼根据编码数字来思考它是不是乱码

只需要查看前一个字节就可以了,如果是0-127之间,就正常解码,否则就推前一个字节进行。

你这个...似乎不可能吧?你也知道汉字编码长度是无规律可循的 编出一个识别乱码的程序 你要它判断...这个...似乎不可行吧?乱码对于计算机来说 一定会在某种环境上是可行的正确代码.....语言GBK太冗杂了 你看看MICRO的各个国家的字符编码.....有100多M...想在这么多的数据中找出规律 做一个识别乱码的程序....几乎不可能 何况不同字符编码遵循不同的规则 .....我觉得根本无规律可循

我是楼主。
有附加条件的,是不能回溯的情况,所以楼上的方法不适用
另外即使是判断上个字节,当前个字节本来就是正确的编码中文字,所以它也大于0xa0,那么按你的方法推进一个字节,本来正确的编码又错乱了。