Tornado获得GET参数时中文的编码问题
时间:2011-07-17
来源:互联网
先说一下环境
Tornado:2.0 Python:2.7.1
一个很简单的程序
#coding:utf-8
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
s = self.get_argument('name', '')
self.write(s)
application = tornado.web.Application([
(r"/", MainHandler),
], debug=True)
if __name__ == "__main__":
application.listen(888
tornado.ioloop.IOLoop.instance().start()
以上程序运行时,在FireFox里打开“http://127.0.0.7:8888/?name=测试”,FireFox自动将其
urlencode,变成“http://127.0.0.7:8888/?name=%B2%E2%CA%D4”
页面返回500错误,Trackback:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 0:
invalid start byte
现在换成IE打开,地址同样是“http://127.0.0.7:8888/?name=测试”,IE并没有自动将其urlencode,同样
Tornado也未报错,页面返回“²âÊÔ”(乱码),而不是想要的结果。
下面的研究针对于IE,因为使用FireFox连一个完整的请求都无法完成(返回500并抛出异常)
经检查,IE的编码被自动设置为UTF-8,完全正确。因为上面的self.get_argument函数的文档里已经很明确的写到“Return
value are always Unicode”
考虑到Python内部的Unicode实际上是UTF-16的实现,怀疑IE因此不能正确识别,于是将
s = self.get_argument('name', '')
修改为
s = self.get_argument('name', '').encode('utf-8')
乱码依旧,页面仍然显示“²âÊÔ”
请问各位,如何解决这两个问题?已经快被搞疯了,Tornado的代码翻了半天也没有发现问题所在。
Tornado:2.0 Python:2.7.1
一个很简单的程序
#coding:utf-8
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
s = self.get_argument('name', '')
self.write(s)
application = tornado.web.Application([
(r"/", MainHandler),
], debug=True)
if __name__ == "__main__":
application.listen(888

tornado.ioloop.IOLoop.instance().start()
以上程序运行时,在FireFox里打开“http://127.0.0.7:8888/?name=测试”,FireFox自动将其
urlencode,变成“http://127.0.0.7:8888/?name=%B2%E2%CA%D4”
页面返回500错误,Trackback:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb2 in position 0:
invalid start byte
现在换成IE打开,地址同样是“http://127.0.0.7:8888/?name=测试”,IE并没有自动将其urlencode,同样
Tornado也未报错,页面返回“²âÊÔ”(乱码),而不是想要的结果。
下面的研究针对于IE,因为使用FireFox连一个完整的请求都无法完成(返回500并抛出异常)
经检查,IE的编码被自动设置为UTF-8,完全正确。因为上面的self.get_argument函数的文档里已经很明确的写到“Return
value are always Unicode”
考虑到Python内部的Unicode实际上是UTF-16的实现,怀疑IE因此不能正确识别,于是将
s = self.get_argument('name', '')
修改为
s = self.get_argument('name', '').encode('utf-8')
乱码依旧,页面仍然显示“²âÊÔ”
请问各位,如何解决这两个问题?已经快被搞疯了,Tornado的代码翻了半天也没有发现问题所在。
作者: sundatong 发布时间: 2011-07-17
本帖最后由 106033177 于 2011-07-17 23:39 编辑
回复 sundatong
B2E2 CAD4实际上是gbk编码。utf-8编码的话应该是'\xe6\xb5\x8b\xe8\xaf\x95'。
回复 sundatong
B2E2 CAD4实际上是gbk编码。utf-8编码的话应该是'\xe6\xb5\x8b\xe8\xaf\x95'。
作者: 106033177 发布时间: 2011-07-17
将python环境 编码 设置为 utf-8
作者: hiaio 发布时间: 2011-07-17
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28