[大发评论,因为意见不能被格式化以及]
继@Boaz的Yaniv的指令工作对我来说:
>>> addressString = 'Wilhelmstra\xc3\x9fe 123, T\xc3\xbcbingen, Deutschland'
这是一个str
ojbject,在UTF-8编码。我们需要百分比转义它,以便它可以在URL中使用。
>>> import urllib
>>> fixed = urllib.quote(addressString)
>>> print repr(fixed)
'Wilhelmstra%C3%9Fe%20123%2C%20T%C3%BCbingen%2C%20Deutschland'
现在,让我们尝试一下:
>>> url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + fixed +
"&sensor=false"
>>> guff = urllib.urlopen(url).read()
>>> import json
>>> print repr(json.loads(guff)['results'][0]['formatted_address'])
u'Wilhelmstra\xdfe 123, 72074 T\xfcbingen, Germany'
>>>
如果你有这样的事情:'Wilhelmstra\xdfe 123, T\xfcbingen, Deutschland'
,这是在LATIN1或CP1252或任何编码的str
对象。你需要将它解码为一个unicode
对象,然后使用UTF-8对其进行编码,然后百分比转义。
但是,如果你有(很微妙的差异)u'Wilhelmstra\xdfe 123, T\xfcbingen, Deutschland'
,这是一个unicode
对象,你需要用UTF-8编码,然后百分号转义它。
你说的“”“ 我仍然得到相同的错误信息:异常类型:UnicodeEncodeError异常值:'ascii'编解码器无法编码字符u'\ xdf'在位置10:序号不在范围内(128)请求链接 “””
时,这看起来像你喂unicode
对象一些东西,想要一个str
对象,并尝试使用(通常默认)ascii
编码编码得到它。如果你仍然有这个问题,请显示你的代码。将其分解到必要的最小值(正如我上面所做的那样)。显示repr(step_by_step_results)。
你需要指定这是python2还是python3,因为unicode处理在Python3中得到了显着改进 – ninjagecko 2011-05-09 12:13:09
你是否希望Unicode字符在URL中显示为真实字符(即不是百分号序列)?因为这取决于浏览器,而不是Python。大多数现代浏览器应将这些序列转换为Unicode,但不能在URL中直接使用Unicode - 该标准仅允许使用ASCII。 – 2011-05-09 12:16:42
@ninjagecko:http://docs.djangoproject.com/en/dev/faq/install/#can-i-use-django-with-python-3 – 2011-05-09 12:18:16