编码问题的思考-python编码问题

 

关于python的编码问题最近遇到比较多,现在感觉要解决编码问题主要了解下面几个问题:

1.读入的字符串的编码

2.运行环境编码

3.输出的字符串编码

4.decode和encode

 

关于乱码的典型例子就是:如果我们读入一个gb2312编码的字符串,然后把字符串当成utf-8编码输出的话就会产生乱码。

典型的代码如下:


在该代码中,sys.getdefaultencoding()是获取运行环境的编码,如果运行环境的编码是ASCII,遇到了多字节混排的话,就使用sys.getfilesystemencoding()的编码编码,如果是MBCS,就使用local模块中的getdefaultlocale()映射出的编码。

 

不同的输出:

1.在我的PyDev运行环境中编码是utf-8(即用print函数会自动把字符串当成是utf-8编码的格式输出),读入的百度网页的编码是gb2312的,所以输出的编码是utf-8,所以是乱码。但读入的谷歌网页编码是utf-8,所以输出的就没有乱码。如果把第一行的utf-8改为gbk,运行环境编码就变成了gbk,输出的百度就不会乱码,但谷歌就会乱码了。

2.在DOS命令行模式中,运行环境中的编码始终是ASCII,遇到多字节编码就使用了中文的编码输出了了,结果就是百度没有乱码,google乱码。

3.在Ubuntu系统中,运行环境中的编码是ASCII,但遇到多字节编码就是用了utf-8的编码输出,结果就是百度乱码,Google没有乱码。

 

不同的修正:

1.在PyDev中把从百度获取的字符串转码成utf-8输出

  

2.在命令行模式中把从Google获取的字符串转成gbk输出。

 

3.在Ubuntu系统中就可以同1修正了。

 

现在说的输出只是print,如果是输出到文件的话也同理。如果接收字符串的文件的编码是utf-8,写入的字符串是GBK的话,就会乱码。

decode是把字符串解码成Unicode字符串,encode是把Unicode字符串编码成相应的编码字符串。两个函数主要是用来转码的。

 

感受:

当我们获取一段字符串的时候就要知道该字符串的编码,比如在网页中的charset声明就是做这个用的。然后我们运行的环境使用了什么编码(主要是对python的print的函数自动转换)。最后我们输出字符串的时候就要知道接收我们字符串的程序用的编码,就不会出错了。听说现在python3.x以上对于编码问题已经很少了,都在使用utf-8编码了,感叹自己还在研究些过时的东西。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值