如何重定向到非英文字符的网址?

我正在使用挂架,我的一些网址包含非英文字符,例如:
http://localhost:5000/article/111/文章标题
在大多数情况下,这不会有问题,但在我的登录模块中,在用户退出后,我尝试从
request.headers
获取
referer
,并重定向到该URL。
if user_logout:
    referer = request.headers.get('referer', '/')
    redirect(referer)
不幸的是,如果网址包含非英文字符,并且浏览器名称较大,则会报告此类错误(Firefox可以):
  WebError Traceback:
  UnicodeDecodeError: 'ascii' codec can't decode byte 0xd5 in position 140: ordinal not in range(128) 
View as:   Interactive (full)  |  Text (full)  |  XML (full) clear this 
clear this 
URL: http://localhost:5000/users/logout

Module weberror.evalexception:431 in respond          view
有一种方法可以修复它(但没有好处),在重定向之前使用
urllib.quote()
转换网址。
referer = quote_path(url) # only quote the path of the url
redirect(referer)
这不是一个好的解决方案,因为它只适用于浏览器是IE,而且非常无聊。有什么好的解决方案吗?     
已邀请:
尝试检查RFC的非ascii URL。如果我没记错的话,它们会被转换为ascii等价物。然后,您可以重定向到该。 编辑:根据@ssokolov(见下面的评论):   要查找的具体条款是IDN   (国际化域名)和   Punycode码     
重定向通过引发异常来工作。捕获并将其转换为HTTP响应 如何为您的回复指定字符集? response.charset ='utf8'     
最后,我仍然没有找到一个好的解决方案,并使用此代码:
referer = urllib.quote(referer, '.:/?=;-%#')
现在似乎运作良好,但我感觉不安全。     

要回复问题请先登录注册