python2中urllib.unquote乱码的原因与解决方法

    xiaoxiao2022-07-02  121

    发现问题

    Python中的urllib模块用来处理url相关的操作,unquote方法对应javascript中的urldecode方法,它对url进行解码,把类似"%xx"的字符替换成单个字符,例如:“法国红酒”解码后会转换成“法国红酒”,但是使用过程中,如果姿势不对,最终转换出来的字符会是乱码“法国红酔。

    笔者在一个FLASK应用中就遇到了这样的问题,浏览器通过AJAX请求传递到后台后,由于其参数的值的特殊性,故做了urlencode处理,然而到后台进行处理,总是出现类似于:"法国红é…"的乱码:

    request.values.get('content')默认返回的是值的类型是unicode,而unquote方法处理unicode类型的字符时,直接返回的就是:

    u'\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92'

    注意:这里返回的值类型是unicode,也就是说unquote方法接收参数类型是unidoe,返回的值类型也是unicode,只不过是把"%"替换成了'\x',最终由:

    u"法国红酒"

    替换为了:

    u"\xe6\xb3\x95\xe5\x9b\xbd\xe7\xba\xa2\xe9\x85\x92"

    解决办法:

     

    content = str(request.values.get('content')) if sys.version_info > (3, 0): print('3') content = urllib.parse.unquote(content, encoding='utf-8', errors='replace') else: print('2') content = urllib.unquote(content)
    最新回复(0)