关于python的编码问题的一点记录

  • Linux下中文默认编码是utf-8
  • windows下默认编码是GBK
  • 如果源代码没有声明编码格式,则Python在语法校验期间(compilation)使用默认的ASCII编码
  • 如果源代码没有声明编码格式,但却在源码中使用了非ASCII字符(Non-ASCII character),则程序在编译期间抛出SyntaxError异常,编译不被通过
  • 如果源代码声明了Python不支持的编码格式,则程序将在编译期间抛出异常

我们都知道Python是一门世界通用的编程语言,如果它的源代码文件中出现的都是ASCII支持的字符,那Python会以ASCII编码的格式处理程序。不过,一旦源代码中出现了ASCII不支持的字符,它该怎么办?我用一张图来回答你吧

也就是说,所有超出ASCII范围的字符的处理工作,无论在输入之前,或者输出之后是什么编码格式的,它们在Python的执行内存中,都被统一转换(decode)为Unicode格式来进行程序处理。

encode和decode
从Unicode类型到GBK或UTF-8等编码的转换,叫做编码(encode);而这一过程的逆过程,则叫做解码(decode)。上图也表示了这个过程

字符串在Python内部的表示是Unicode编码。因此在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成Unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成Unicode编码;
encode的作用是将Unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将Unicode编码的字符串str2转换成gb2312编码 因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成Unicode,然后再encode成其他编码。

遇到乱码问题,按上述思路分析一遍,再将乱码所在字符串按它的原始编码decode成Unicode类型的,再使用Unicode类型的编码进行输入、输出即可解决乱码问题。

参考内容:
关于Python的编码、乱码以及Unicode的一些研究
python3字符串编码总结-str(unicode)_bytes
Python2和3的字符串编码差别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值