python tornado框架中的中文编码问题

使用工具: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

相关文章
相关标签/搜索