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

使用工具:Aptana studio 2, pyDev。

内容:python,tornado框架。CMS(内容管理系统,简称后台)。

情况:在Aptana中运行,在保存含有中文的网页时,即使用nicedit控件,获取字符串,写入文件,相关截图如下:

python tornado框架中的中文编码问题_第1张图片

代码:

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()无法完成任务。

于是我显示加编码:

file = open(fullFilePath,'w')
    file.write(content.encode('utf8'))
    file.close()
这时正常。

不知Aptana干了什么事?

 

相关研究如下:

http://www.iteye.com/topic/757508

1, 乱码,编码错误出现的原因:字符串 str 声明时编码为 a ,而输出(控制台显示或者写入文件,数据库等)时由于环境的不同,默认编码也不同。在不同的环境下, python 会根据各自的默认编码去解码字符串 a 因此 出现乱码( str 对应的 a 编码的值正好都在 b 编码的取值范围内) 或者 编码错误(譬如: a 编码中有值 10000  2 进制的形式),但是 b 编码的取值范围不包括10000 ,就会出现转换错误)

2, 如果变量直接声明为 Unicode 字符,那么在不同输出环境时, python 都能正常地转换为相应的字符串

3, 通过 u 符号声明的 Unicode 字符串在上述 3 种情况下都不出现乱码, 推荐使用

4, 原始字符串和普通字符串声明的字符串的默认编码跟系统环境相关, python 命令行中默认的是操作系统的编码如 windows gbk  pydev 或者 idle 中,字符串的默认编码跟文件头部声明的编码一致(如果文件头部没有声明,那么默认的是 ascii 编码)

感谢原作者desert3

你可能感兴趣的:(python tornado框架中的中文编码问题)