您的位置:首页 > 编程语言 > Python开发

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

2011-07-08 19:27 363 查看
使用工具:Aptana studio 2, pyDev。

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

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



代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: