许子瑜吧 关注:953贴子:120,990

【近期百度贴吧乱码问题的原因解析及解决方法 】

只看楼主收藏回复

乱码产生的原因:
我发现,百度贴吧有意将全角中文标点“<”和“>”替换成相应的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”被替换后的结果!



1楼2011-06-28 13:16回复
    2楼2011-06-28 13:17
    回复
      2025-08-20 15:40:58
      广告
      不感兴趣
      开通SVIP免广告
      基于上述原理,我编写程序对汉字字库进行搜索,结果分成AB两组:A组是第二字节为A3的汉字,B组是第一字节为BC或BE的汉字。分别从A组合B组任意取出一个字,前后组合必定会产生乱码。搜索发现,“A组”大约有120个,“B组”大约有390个,也就是说这种组合约为45600种,并不是一个小数目,而这其中包括月40个常用词,比如“常 见、埃 及、海 景、模 具、疲 倦、危 急、祝 酒”等,可见出现乱码的概率是极高的!我到“埃 及吧”、“模 具吧”、“海 景吧”看了一下,果然最近几天的新帖子都是乱码!
      


      3楼2011-06-28 13:17
      回复
        遇见乱码我就删删删


        4楼2011-06-28 13:17
        回复
          以下常 用词汇均能100%导致乱码。不信?你“复制+粘贴”一下试试:
          保济
          担架
          海菊
          希静
          桑家
          保靖
          埃及
          牛劲
          保驾
          保荐
          保价
          保甲
          保举
          常见
          担惊
          海军
          海景
          罚酒
          荆棘
          溃决
          溃军
          模具
          疲倦
          牵记
          牵就
          耍奸
          危及
          危急
          危局
          危境
          危惧
          校际
          校纪
          希冀
          祝酒
          牵脊
          模件
          


          5楼2011-06-28 13:17
          回复
            哦啦啦~百度娘娘真无爱


            6楼2011-06-28 13:18
            回复
              -PS.以上转自乱码吧-


              7楼2011-06-28 13:18
              回复
                - -..


                8楼2011-06-28 13:19
                回复
                  2025-08-20 15:34:58
                  广告
                  不感兴趣
                  开通SVIP免广告
                  嗯…


                  来自手机贴吧9楼2011-06-28 13:21
                  回复
                    蓝蓝姐- -我能说我没看懂么。。


                    10楼2011-06-28 13:38
                    回复
                      以后再遇见乱码。不要删帖,不要去点。最好的办法就是让它沉了。各位可以用顶赞方式让它们沉掉


                      11楼2011-06-28 13:51
                      回复
                        其实我也没看懂>。<


                        12楼2011-06-28 13:58
                        回复
                          e.你的粉丝数- -


                          13楼2011-06-28 14:00
                          回复
                            戳了- -。


                            14楼2011-06-28 14:00
                            回复
                              2025-08-20 15:28:58
                              广告
                              不感兴趣
                              开通SVIP免广告
                              对的- -


                              15楼2011-06-28 14:06
                              回复