作者:丙尔金开发_448 | 来源:互联网 | 2023-05-18 01:03
最近用Tornado搭建的一个小的server,处理前端传回来的url。但是传回搜狗的结果的时候,因为url中有GBK编码,所以解析出错。所以,我想问一下有没有什么好的办法,可以处理这样的情况
最近用Tornado搭建的一个小的server,处理前端传回来的url。
但是传回搜狗的结果的时候,因为url中有GBK编码,所以解析出错。
所以,我想问一下有没有什么好的办法,可以处理这样的情况
在搜狗搜索“编码”
http://localhost:8011/?url=http://www.sogou.com/web?query=%B1%E0%C2%EB&_ast=1338597120&_asf=null&w=01029901&p=40040100&dp=1&czgd=0&sut=3584&sst0=1338598003568
#!/usr/bin/env python
# coding=utf-8
import urlparse
import urllib
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.database
import tornado.httpserver
import tornado.autoreload
# ------------ handler code ------------
class BaseHandler(tornado.web.RequestHandler):
def get(self):
url = self.get_argument("url",'')
print url
return 0
def post(self):
self.write('this post')
class HomeHandler(BaseHandler):
pass
class InfoHandler(BaseHandler):
def get(self):
print "infoHnadler"
pass
# ------------ main code -------------
settings = dict(
title = u"Simple",
xsrf_COOKIEs = False,
autoescape = None,
login_url = "/login",
gzip = True,
debug = True)
handlers = [
(r"/", HomeHandler),
(r"/info", InfoHandler)
]
def get_application():
application = tornado.web.Application(handlers,**settings)
#application.db = get_engine('')
return application
def main():
application = get_application()
http_server = tornado.httpserver.HTTPServer(application, xheaders = True)
http_server.bind(8011)
http_server.start(1)
loop = tornado.ioloop.IOLoop.instance()
loop.start()
if __name__ == "__main__":
total = 0
main()
会提示下列错误信息
Traceback (most recent call last):
File "c:\Python26\lib\site-packages\tornado-2.2.1-py2.6.egg\tornado\web.py", line 988, in _execute
getattr(self, self.request.method.lower())(*args, **kwargs)
File "e:\simple_tornado.py", line 25, in get
url = self.get_argument("url",'')
File "c:\Python26\lib\site-packages\tornado-2.2.1-py2.6.egg\tornado\web.py", line 295, in get_argument
args = self.get_arguments(name, strip=strip)
File "c:\Python26\lib\site-packages\tornado-2.2.1-py2.6.egg\tornado\web.py", line 311, in get_arguments
v = self.decode_argument(v, name=name)
File "c:\Python26\lib\site-packages\tornado-2.2.1-py2.6.egg\tornado\web.py", line 334, in decode_argument
return _unicode(value)
File "c:\Python26\lib\site-packages\tornado-2.2.1-py2.6.egg\tornado\escape.py", line 174, in to_unicode
return value.decode("utf-8")
File "c:\Python26\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb1 in position 31: invalid start byte
在网上找了半天了,可能没有好的办法。
tornado又不太熟悉,请问有没有别的办法,可以预先处理一下。
3 个解决方案
谢谢你的意思是 前端以utf-8编码传回来 而不是在服务器端做处理 对么?