使用工具:Aptana studio 2, pyDev。python
内容:python,tornado框架。CMS(内容管理系统,简称后台)。web
状况:在Aptana中运行,在保存含有中文的网页时,即便用nicedit控件,获取字符串,写入文件,相关截图以下:shell
代码:数据库
file = open(fullFilePath,'w') file.write(content) file.close() #content为传入字符串这时候没有错误,正常保存。
可是,当我部署到windows 32环境中,使用command shell运行时,报错: UnicodeDecodeError( 命令行中默认使用的是 windows 系统的 gbk 编码, str 就是使用 gbk 编码的字符串,使用 utf-8 解码时部分字节值超出 utf-8 范围,系统错误 ),file.write()没法完成任务。windows
因而我显示加编码:框架
file = open(fullFilePath,'w') file.write(content.encode('utf8')) file.close()这时正常。
不知Aptana干了什么事?tornado
相关研究以下:工具
http://www.iteye.com/topic/757508编码
1, 乱码,编码错误出现的缘由:字符串 str 声明时编码为 a ,而输出(控制台显示或者写入文件,数据库等)时因为环境的不一样,默认编码也不一样。在不一样的环境下, python 会根据各自的默认编码去解码字符串 a ,所以 出现乱码( str 对应的 a 编码的值正好都在 b 编码的取值范围内) 或者 编码错误(譬如: a 编码中有值 10000 ( 2 进制的形式),可是 b 编码的取值范围不包括10000 ,就会出现转换错误)spa
2, 若是变量直接声明为 Unicode 字符,那么在不一样输出环境时, python 都能正常地转换为相应的字符串
3, 经过 u 符号声明的 Unicode 字符串在上述 3 种状况下都不出现乱码, 推荐使用
4, 原始字符串和普通字符串声明的字符串的默认编码跟系统环境相关, python 命令行中默认的是操做系统的编码如 windows 的gbk , pydev 或者 idle 中,字符串的默认编码跟文件头部声明的编码一致(若是文件头部没有声明,那么默认的是 ascii 编码)
感谢原做者desert3