python 转码问题

为什么需要sys.setdefaultencoding(“utf-8”)

  • 因为python转码是通过unicode作为中间码的。
  • 比如字符串 x = “你们”,本身是str,
    首先我们指定了文件编码uft8,所以x是utf8编码的。
  • 如果要转化gb18030, 默认是x用默认解码方式(ASCII)decode成中间码 unicode -> encode成gb18030
  • 如果x是abc这些ascii字符本身ascii和utf8方式是一样的,不会报错;
  • 但是x是中文,就不能按ascii方式解码了。。怎么办呢?
  • 1 . 自己指定解码方式,在编码
	y = x.decode("utf-8").encode("gb18030")
  • 2.开头设置默认编解码方式
	import sys
	reload(sys)
	sys.setdefaultencoding("utf-8")

为什么reload(sys)呢

  • 因为模块/lib/site.py删除了sys.setdefaultencoding这个函数。

site.py 有什么作用

  • 是解释器初始化时自动导入的,这个模块的作用是:自动将第三方模块路径加入到sys.path中。

import的实质

  • import sys导入语句,只是导入了一个对sys的引用,因为别人已经提前导入了sys,后面的模块使用sys都是引用这个对象。
  • 而作为初始化模块site.py,导入了许多内建模块包括sys,而且删除了sys.setdefaultencoding这个方法,后面你写的模块,只要导入sys,都是没有这个方法的。
  • 所以需要reload一把,reload也是有前提的,就是之前已经加载过的模块,如果没有加载过的,就无重谈起重新加载了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值