最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】一个javascript中显示乱码

JS crifan 2694浏览 0评论

【已解决】一个javascript中显示乱码

 

【背景】

在分析163博客的html源码中,看到对应的js脚本代码:

  <script type=”text/javascript” src=”http://b1.bst.126.net/newpage/r/j/ec.js?v=6827128336“>
  </script>
  <script type=”text/javascript” src=”http://b1.bst.126.net/newpage/r/j/m/m-1/pm.js?v=1262458879“>
  </script>

然后就去下载了下来,但是其中包括的中文却是乱码。

【解决过程】

1.当前用的文本编辑器是notepad++,此时默认用的utf-8的编码,

然后去转换成了GB2312编码,结果还是显示乱码。

2.python中,尝试了如下内容:

【未解决】一个javascript中显示乱码 - crifan - work and job

其中的用 print u”评论”,所得到的结果,就是当前所看到的乱码。

看起来像是本来utf-8的编码,然后在gb18030的模式下显示出来的乱码。

而对于评论这四个字符,对应的utf-8的编码是上述的’xc3x86xc3x80xc3x82xc3x9b’,也和我用notepad++通过Hex模式所查看到的那几个乱码所对应的编码,是一致的,所以看起来,这个乱码的内容,本身包含的就是utf-8编码才对。

不过很怪的是,单独建立一个文本,使用utf-8,带BOM或不带BOM,所得编码,又都不是’xc3x86xc3x80xc3x82xc3x9b’了。

其中‘评论’的不带BOM的utf-8编码为:e8 af 84 e8 ae ba

 

2. 同时,上述结果可以看出,不允许对u’评论’进行gb2312和bgk编码,看起来像是“评论”这两个中文字符,在GB2312和GBK中没有包含,但是觉得这个结论,貌似也不像啊,怎么说GB2312和GBK,至少应该已包含这两个字符才对。

但是至少,应该去试试GB18030编码的显示,是否正确。

然后网上下载了个最新版本的notepad2,其中支持GB18030,但是去试了,也还是无法正常显示。

 

3.虽然不能显示,但是至少摸索到一个小规则,那就是去python中

print u”阅读全文”,即可得到“阅读全文”这四个字符,所对应的乱码,然后可以通过搜索乱码,得到对应的“阅读全文”所对应的位置。

 

4.网上搜了 js乱码,然后找到一堆解释,看来下,貌似都没啥用。

不过,倒是让我突然想起了之前的这个帖子:

【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)

http://againinput4.blog.163.com/blog/static/1727994912011111011432810/

然后去尝试在调用beautifulsoup的时候,传递对应的编码:

soup = BeautifulSoup(page, fromEncoding=”GB18030“)

而解决了问题。
因为beautifulsoup去解析html源码的时候,会自动根据头部的charset去尝试解码,而此处由于本身js中没有charset指定,或者是像之前那样,网易的页面,本身指定的的gb2312,实际上用到了GBK,甚至gb18030,那么,就需要我们调用beautifulsoup的时候,手动指定正确的编码,然后beautifulsoup解析后的结果,才是正常的,否则就会出现乱码问题。

 

【总结】

网页显示乱码,如果没有经过其他处理,那么要自己去文本类编辑器,尝试不同编码。

如果已经经过一些处理,比如我这里的经过了beautifulsoup处理,那么要小心这类工具,是否需要指定编码等额外需要考虑的事情。

都考虑到位了,才不会出现乱码问题。

转载请注明:在路上 » 【已解决】一个javascript中显示乱码

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.163 seconds, using 22.14MB memory