【发布时间】:2016-08-24 03:23:34
【问题描述】:
例如,如果我有一个编码字符串为:
url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pav%C3%A9+cafe&postalCode=5067'
name 参数包含字符 %C3%A9,实际上暗示字符 é。
因此,我希望输出为:
new_url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067'
我在 Python 终端上尝试了以下步骤:
>>> import urllib2
>>> url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pav%C3%A9+cafe&postalCode=5067'
>>> new_url=urllib2.unquote(url).decode('utf8')
>>> print new_url
locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067
>>>
但是,当我在 Python 脚本 中尝试相同的操作并以 myscript.py 运行时,我得到以下堆栈跟踪:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 88: ordinal not in range(128)
我使用的是Python 2.6.6,由于工作原因无法切换到其他版本。
我该如何克服这个错误?
非常感谢任何帮助。提前致谢!
######################################################
编辑
我意识到我得到了上述预期的输出。
但是,我想将new_url中的参数转换成字典如下。这样做时,我无法在我的名称参数中保留特殊字符“é”。
print new_url
params_list = new_url.split("&")
print(params_list)
params_dict={}
for p in params_list:
temp = p.split("=")
params_dict[temp[0]] = temp[1]
print(params_dict)
输出:
new_url
locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067
params_list
[u'locality=Norwood', u'address=138+The+Parade', u'region=SA', u'country=AU', u'name=Pav\xe9+cafe', u'postalCode =5067']
params_dict
{u'name': u'Pav\xe9+cafe', u'locality': u'Norwood', u'country': u'AU', u'region': u'SA', u'地址': u'138+The+Parade', u'邮编': u'5067'}
基本上...名称现在是“Pav\xe9+cafe”,而不是必需的“Pavé”。
我怎样才能在我的 params_dict 中仍然保留相同的特殊字符?
【问题讨论】:
-
我无法重现您的错误。您确定在终端和脚本中使用相同的代码吗?
-
@machineyearning 你是对的。请检查我的编辑是否存在实际问题。
标签: python python-2.6 python-unicode