理清 python 编码相关问题
2012-09-28 16:59
225 查看
这两天在纠结一份代码, 彻底解决后把之前遇到的相关问题整理一份出来,一来自己理清思路,一来在网上有什么错误也会被提前发现。
1. 源代码级别
源代码级别是指在.py文件中,采用了何种类型的编码作为源代码。
默认与操作系统一样,都是采用了最简单的ASCII编码。当使用了中文注释后,就会提示如下问题
SyntaxError: Non-ASCII character '\xe5' in file test.py on line 5, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
这时,就需要设置文件的编码语言,最好看的写法是:
# -*- coding : utf-8 -*-
我觉得看到这行代码的时候,会有些看向美女的感觉。
咱们码农还是这样吧。。 #coding: utf-8
这样,在源代码级别使用中文就没有问题了。我们可以轻松通过解释器这一关
2. 代码保存级别
在linux下呆久了,会有个缺点,很少关注无关的东西,写个代码utf-8就完事了。
用ultra的时候突然发现原来UTF-8 还有炸弹的,很可能天上掉下个大炸弹,代码就失效了:)
引用一段很不错的介绍:http://www.cnblogs.com/DDark/archive/2011/11/28/2266085.html 关于bom对文件影响
总体来说就是windows下,bom会在最开端插入标明自身的签名。
因此如果想在linux下使用这份脚本,保存为通用的utf-8 无炸弹吧!
3. 代码执行级别
info = "启动中..." 或 info = u"启动中..."
这里只要牢记--在编译时会把 字符串 转换成 unicode对象 就可以了
即已经不再是按照源代码的格式来保存字符串了。
而不包含u的,则是按照原始格式存储。而这里的原始格式,恰好就是之前第一部分说到的源代码级别编码格式。
再后续执行时,就涉及到了运行环境的编码,
可以使用 sys.getdefaultencoding() 查看当前运行环境的编码
使用reload(sys)
sys.setdefaultencoding('utf-8') 重新设定运行环境编码
而处理编码文本就是一个套路了,先根据源格式decode,再encode成自己想要的格式
1. 源代码级别
REF: PEP 0263 -- Defining Python Source Code Encodings
Python will default to ASCII as standard encoding if no other
encoding hints are given.
To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file
Python will default to ASCII as standard encoding if no other
encoding hints are given.
To define a source code encoding, a magic comment must
be placed into the source files either as first or second
line in the file
源代码级别是指在.py文件中,采用了何种类型的编码作为源代码。
默认与操作系统一样,都是采用了最简单的ASCII编码。当使用了中文注释后,就会提示如下问题
SyntaxError: Non-ASCII character '\xe5' in file test.py on line 5, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
这时,就需要设置文件的编码语言,最好看的写法是:
# -*- coding : utf-8 -*-
我觉得看到这行代码的时候,会有些看向美女的感觉。
咱们码农还是这样吧。。 #coding: utf-8
这样,在源代码级别使用中文就没有问题了。我们可以轻松通过解释器这一关
2. 代码保存级别
在linux下呆久了,会有个缺点,很少关注无关的东西,写个代码utf-8就完事了。
用ultra的时候突然发现原来UTF-8 还有炸弹的,很可能天上掉下个大炸弹,代码就失效了:)
引用一段很不错的介绍:http://www.cnblogs.com/DDark/archive/2011/11/28/2266085.html 关于bom对文件影响
总体来说就是windows下,bom会在最开端插入标明自身的签名。
因此如果想在linux下使用这份脚本,保存为通用的utf-8 无炸弹吧!
3. 代码执行级别
info = "启动中..." 或 info = u"启动中..."
这里只要牢记--在编译时会把 字符串 转换成 unicode对象 就可以了
即已经不再是按照源代码的格式来保存字符串了。
而不包含u的,则是按照原始格式存储。而这里的原始格式,恰好就是之前第一部分说到的源代码级别编码格式。
再后续执行时,就涉及到了运行环境的编码,
可以使用 sys.getdefaultencoding() 查看当前运行环境的编码
使用reload(sys)
sys.setdefaultencoding('utf-8') 重新设定运行环境编码
而处理编码文本就是一个套路了,先根据源格式decode,再encode成自己想要的格式
相关文章推荐
- 理清 python 编码相关问题(转载)
- Python 和 数据库相关的编码问题
- python 编码相关问题总结
- Python编码相关问题
- Python编码相关问题 Unicode UTF-8 encode() decode()
- python 编码编码相关问题
- python获取网页内容的相关编码问题
- 【待整理】Python中的编码问题和相关error
- python 编码问题总结
- python 中文编码问题
- (转)unity开发相关环境(vs、MonoDevelop)windows平台编码问题
- Java EE 中的请求和响应编码问题 - 相关API汇总
- python获取html编码GB2312中文乱码的问题
- Python 处理GBK编码转UTF-8读写乱码问题
- Python 中文编码的问题
- 菜鸟学Python(4):编码问题
- 【python】使用cjson的编码问题
- python中多重继承相关问题
- python的编码问题
- python编码问题总结