例如,如果我有一个编码字符串:
url='locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pav%C3%A9+cafe&postalCode=5067'
name参数包含字符%C3%A9,这实际上意味着字符é。在
因此,我希望输出为:
^{pr2}$我在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)
我使用的是python2.6.6,由于工作原因无法切换到其他版本。在
我怎样才能克服这个错误?在
非常感谢任何帮助。提前谢谢!在
######################################################
编辑
我意识到我得到了上述预期的输出。
但是我希望将新url中的参数转换成字典,如下所示。这样做时,我无法在name参数中保留特殊字符'e'。在
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)
输出:
新网址
locality=Norwood&address=138+The+Parade®ion=SA&country=AU&name=Pavé+cafe&postalCode=5067
参数列表
[u'locality=Norwood',u'address=138+The+Parade',u'region=SA',u'country=AU',u'name=Pav\xe9+cafe',u'postalCode=5067']
参数
{u'name':u'Pav\xe9+cafe',u'locality':u'Norwood',u'country':u'AU',u'region':u'SA',u'address':u'138+游行队伍,u'postalCode':u'5067'}
基本上。。。名称现在是“Pav\xe9+cafe”,而不是必需的“Pavé”。在
我怎样才能在我的情书中保留同样的特殊字符?在
这实际上是由于}之间的差异。当打印unicode字符串时,
__repr__
和{__str__
将被使用,并导致打印new_url
时看到的é
。但是,当打印列表或dict时,__repr__
被使用,它对列表和dict中的每个对象使用__repr__
。如果您单独打印项目,它们将按您的需要打印。在打印列表和dict的一种方法是获取它们的字符串表示形式,然后用
^{pr2}$unicode-escape
对它们进行解码:注意:这只是Python2中的一个问题。Python3按您的预期打印字符。另外,您可能需要查看^{} 来解析您的URL,而不是手动进行解析。在
相关问题 更多 >
编程相关推荐