与Python中的unicode混淆

neu*_*rix 1 python unicode ascii decode hyperlink

作为Django站点的一部分,用户可以输入街道名称,该条目将添加到谷歌地图地理编码链接.一切正常,直到用户输入特殊字符.

我想在链接中显示特殊字符,但是python用unicode符号替换字符.有没有办法阻止python切换到unicode并简单地接受用户输入?我尝试了几种解码器和格式,但它没有解决问题.

编辑:代码在Python 2中编程.

我目前正在请求JSON响应如下:

    url = "http://maps.googleapis.com/maps/api/geocode/json?address=" +
          addressString.decode('ascii') + "&sensor=false";
    googleResponse = urllib.urlopen(url);
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助和建议.

Boa*_*niv 5

首先,检查addressString是否是一个Unicode对象(如果您使用的是Python 3,或者type(addressString)显示的是'unicode').如果是,那么您可能需要尝试以下方法:

url = "http://maps.googleapis.com/maps/api/geocode/json?address=" +
      urllib.quote(addressString.encode('utf-8')) + "&sensor=false";
Run Code Online (Sandbox Code Playgroud)

如果addressString是(非unicode)字符串对象(在Python 2中)或字节对象(在Python 3中),那么它必须已经以UTF-8编码.在这种情况下,请尝试以下方法:

url = "http://maps.googleapis.com/maps/api/geocode/json?address=" +
      urllib.quote(addressString) + "&sensor=false";
Run Code Online (Sandbox Code Playgroud)

这两个片段都应该使用%符号将unicode字符转换为URL转义序列.这是在URL中使用非ASCII字符的标准方法.现代浏览器应该解码这些序列,将它们显示为Unicode字符.