近期百度贴吧乱码问题的原因解析及解决方法
2009-01-13 21:36
609 查看
最近几天,百度贴吧发帖频频出现乱码,并伴随 ?#65308; ?#65310; 之类怪异代码。
乱码产生的原因:
我发现,百度贴吧有意将全角中文标点“<”和“>”替换成相应的html转义代码。两个标点的机内字节码分别为 A3 BC 和 A3 BE (两个字节存储一个汉字),相应的转义代码分别为 < >。但这种替换只是简单的单字节字符串的匹配和替代,并未按汉字编码的双字节进行分割,导致相邻的两个汉字的 [前一个汉字的第二字节] 与 [后一个汉字的第一字节] 极有可能“拼凑”出 A3 BC 或 A3 BE ,倘若将此处的两个字节替换成转义代码,会截断这前后两个汉字,并导致后续的双字节汉字全部错位!
例如,“常见”的字节码是 B3 A3 BC FB ,中间的 A3 BC 恰巧是“<”的编码,这两个字节被替换成了<字符串,余下了前面的 B3 和后面的 FB 两个残缺的字节,FB字节再与后面的双字节序列组合,导致后续字节组合全部错位(除非遇到ASCII单字节字符)!如图,第一个窗口是“<>”两个字符的字节码,其中 A3 BC 是“<”的编码;第二个窗口是“常见”的字节码,看以看出中间两个字节正是“A3 BC”;第三个窗口中的字符串包含了“常见”;第四个窗口是经百度发帖程序替换过的,图中选中区域是“<”的字节码,恰巧是第三个窗口中的“A3 BC”被替换后的结果!
基于上述原理,我编写程序对汉字字库进行搜索,结果分成AB两组:A组是第二字节为A3的汉字,B组是第一字节为BC或BE的汉字。分别从A组合B组任意取出一个字,前后组合必定会产生乱码。搜索发现,“A组”大约有120个,“B组”大约有390个,也就是说这种组合约为45600种,并不是一个小数目,而这其中包括月40个常用词,比如“常见、埃及、海景、模具、疲倦、危急、祝酒”等,可见出现乱码的概率是极高的!我到“埃及吧”、“模具吧”、“海景吧”看了一下,果然最近几天的新帖子都是乱码!
解决方法与处理建议:
对吧友们来说,发帖时可以在这种组合的词之间加一个空格以避免乱码。
对百度技术人员来说,这个bug导致的乱码太多了,应尽快修复。
乱码产生的原因:
我发现,百度贴吧有意将全角中文标点“<”和“>”替换成相应的html转义代码。两个标点的机内字节码分别为 A3 BC 和 A3 BE (两个字节存储一个汉字),相应的转义代码分别为 < >。但这种替换只是简单的单字节字符串的匹配和替代,并未按汉字编码的双字节进行分割,导致相邻的两个汉字的 [前一个汉字的第二字节] 与 [后一个汉字的第一字节] 极有可能“拼凑”出 A3 BC 或 A3 BE ,倘若将此处的两个字节替换成转义代码,会截断这前后两个汉字,并导致后续的双字节汉字全部错位!
例如,“常见”的字节码是 B3 A3 BC FB ,中间的 A3 BC 恰巧是“<”的编码,这两个字节被替换成了<字符串,余下了前面的 B3 和后面的 FB 两个残缺的字节,FB字节再与后面的双字节序列组合,导致后续字节组合全部错位(除非遇到ASCII单字节字符)!如图,第一个窗口是“<>”两个字符的字节码,其中 A3 BC 是“<”的编码;第二个窗口是“常见”的字节码,看以看出中间两个字节正是“A3 BC”;第三个窗口中的字符串包含了“常见”;第四个窗口是经百度发帖程序替换过的,图中选中区域是“<”的字节码,恰巧是第三个窗口中的“A3 BC”被替换后的结果!
基于上述原理,我编写程序对汉字字库进行搜索,结果分成AB两组:A组是第二字节为A3的汉字,B组是第一字节为BC或BE的汉字。分别从A组合B组任意取出一个字,前后组合必定会产生乱码。搜索发现,“A组”大约有120个,“B组”大约有390个,也就是说这种组合约为45600种,并不是一个小数目,而这其中包括月40个常用词,比如“常见、埃及、海景、模具、疲倦、危急、祝酒”等,可见出现乱码的概率是极高的!我到“埃及吧”、“模具吧”、“海景吧”看了一下,果然最近几天的新帖子都是乱码!
解决方法与处理建议:
对吧友们来说,发帖时可以在这种组合的词之间加一个空格以避免乱码。
对百度技术人员来说,这个bug导致的乱码太多了,应尽快修复。
相关文章推荐
- 前台使用js的encodeURIComponent编码后,java解析乱码问题的解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法
- android客户端解析本地json数组出现乱码问题解决方法
- Oracle汉字乱码问题原因及解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法!
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- get请求时候参数中含有“中文”字段出现乱码问题的原因和解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法!
- Code:Blocks 中文乱码问题原因分析和解决方法!
- Oracle汉字乱码问题原因及解决方法
- Code::Blocks 中文乱码问题原因分析和解决方法
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- ASP.NET MVC中解析淘宝网页出现乱码问题的解决方法
- 读取文本出现 锘 * 系列乱码错误(UTF-8 BOM问题)的原因及解决方法
- Tomcat中文乱码问题原因和解决方法
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- 关于利用Jsoup解析HTML中 ;变成非传统空格或乱码问题解决方法
- Tomcat中文乱码问题原因和解决方法
- Code:Blocks 中文乱码问题原因分析和解决方法!
- 关于利用Jsoup解析HTML中 变成非传统空格或乱码问题解决方法