Django教程:[40]URL GET中文参数编码问题

2025-10-25 15:58:55

今天在做一个网站登陆功能的时候发现一个问题,当访问我的网站的get请求带有中文参数的时候,总是会报错: 'ascii' codec can't decode byte 0xe7 。经过半天努力终于搞清楚是什么问题了。在python源码中我们经常用的是utf-编码,为了保持平台兼容性,我们也会让数据都是用utf-8编码。但是url中的参数如果有中文,通常用的是GB2312编码格式,这就导致了我们如果直接从URL中读取参数,会得到乱码,需要进行转换才可以,下面看看具体的代码。

    先来看看python中的字符串编码问题,如果我们不声明字符串的编码格式,他们都是asci格式存储的,你看一下这种格式:

    Django教程:[40]URL GET中文参数编码问题

    我们可以使用decode对其进行编码,这样实际转换成了unicode字符串

    Django教程:[40]URL GET中文参数编码问题

    明白这个道理以后,我们还要知道:由于Django默认将内部的ansi字符串通过utf-8格式转化成unicode。所以如果是处理自己网站产生的URL中文参数是没有问题的(因为自己的response是utf-8的),但是如果是用户输入的或者其他网站的请求,浏览器会使用gb2312编码中文,然后你的django会使用utf-8进行解码,当然会发生错误:urldecode 'ascii' codec can't decode byte 

    Django教程:[40]URL GET中文参数编码问题

    所以,我们对进来的中文进行恰当的编码就可以了。我们首先可以对request进行gb2312编码,这样就与字符串本身的编码方式相同,得到unicode字符串

    Django教程:[40]URL GET中文参数编码问题

    之后,我们再使用utf-8进行编码就可以得到正确的字符串了。

    Django教程:[40]URL GET中文参数编码问题

    我也是python django新手,如果有什么问题,欢迎赐教,以下是我今天用到的一些代码:

    def user_login(request):

        request.encoding='gb2312'

        api_info='登陆接口URL'

        try:

            callback=request.GET.get('callback')

            callback=callback.encode('utf-8')

        except Exception as e:

            callback='fuck!!!'

        f=open('d:/log.txt','a')

        f.write('api:%s,islogin:%s.

     

    ' % (api_info,callback))

        f.close()

(共篇)上一篇:向已有模型添加字...|下一篇:
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢