编码格式
目前我们在用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
网友评论