说清楚python的字符编码问题

编码格式

目前我们在用python开发项目中经常使用的编码格式是gbk和utf-8.但是python内部为了效率都是用的unicode的双字节编码格式.
为什么会有这个几个的编码格式?

  • ASCII码为了解决输入英文的问题
  • 处理中文用GBK
  • 处理世界各国语言用unicode
  • 减少unicode字符长度和传输效率在unicode的基础上产生了utf-8

为什么在要文件头加上类似#encode这样的一行

用#encode的原因是告诉编译器我们这个文件是需要用什么解码器器来编解码.

  • 如果你声明为#encode=utf8,你源文件也是utf-8,python解释器就能解释你的源码
  • 如果你声明为#encode=utf8,你源文件用的gbk,python会直接抛出异常,因为有些gbk编码在用utf8解释器解释不了
  • 如果你声明为#encode=gbk,你源文件也是gbk,源代码是可以解析的
  • 如果你声明为#encode=gbk,你源文件用的是utf8,源代码会解析成乱码

为什么有的文件用u''这样来表示字符串

python中在字符串前面加上u即(u'')跟文件的物理编码没有关系.只是加载到内存中自动用unicode编码来表示.原理是python先将源文件中的源码用#encode=utf8 这个声明中的编码去解析,解释逻辑根据上面中的情况,如果解析成功了,会自动转乘unicode编码保存在内存中.

以r开头的字符,常用于正则表达式,对应着re模块。

为什么我的文件格式和文件头是对应的还是会出现乱码?

最终字符能不能正常显示还要看控制台用的是什么编码格式.正常应该用编码格式和解码格式还有控制台的显示的编码格式统一

python默认的编码格式sys.getdefaultencoding()可以获取,多数情况是ascii码.

最后

有什么问题加微博讨论van1988ch

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容