求助:遇到奇怪的 python2 编码问题

2017-03-08 18:44:31 +08:00
 goalong

基本的代码是这样:

import codecs

filename = u"测试.doc"

with codecs.open(filename, 'w', 'utf-8') as f:

f.write("lalala")

就是这样简单的写入一个文件,在本地的 Mac 上是 OK 的,在 ubuntu 服务器上 python 解释器的交互环境里执行也没问题,但是写成一个 Tornado 的 handler 就报 UnicodeEncodeError 了,很奇怪,文件头部是写有# --coding:utf8 --编码声明的,也试过 reload(sys), sys.setdefaultencoding('utf-8')这样的修改系统文件编码,还是报原来的错,求各位指点。

1774 次点击
所在节点    Python
4 条回复
nicevar
2017-03-08 22:37:29 +08:00
你用 print sys.getdefaultencoding()获取一下当前的编码方式,我怀疑你代码写得有问题,不是 utf8 编码
lzjun
2017-03-09 09:30:42 +08:00
你是说在 f.write 的时候报错吗?
goalong
2017-03-09 10:08:42 +08:00
@nicevar @lzjun 谢谢你们的回复, sys.getdefaultencoding()得到的是 ascii ,可是我之后加上 reload(sys), sys.setdefaultencoding('utf-8'),仍然用 sys.getdefaultencoding()得到编码是 utf-8 了,后面再进行文件的写入,还是报错,错误是在 with 那一行。另外,把 filename 改成"测试.doc"即 str 类型的, 就能成功执行了,估计还是跟运行环境有关,可是在同样的环境下,在 python 解释器里一行一行执行,也是成功的,真是费解
zsz
2017-03-11 19:08:08 +08:00
你虽然在 tornado 中把编码修改了,但是对于字面量 u"测试.doc" 已经强制用 unicode 了,你需要转换成 utf8 ,或者改成字符串类型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX