热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

请教一个tornado编码的问题,如果前端传输的是gbk的编码,会报错

最近用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 个解决方案

#1


字符串编解码:

str.decode('gbk').encode('utf-8')

#2


最好用 gb18030 解码:

str.decode('gb18030').encode('utf-8')

#3


谢谢你的意思是  前端以utf-8编码传回来   而不是在服务器端做处理  对么?

推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
丙尔金开发_448
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有