我希望这应该是一件容易的事。我有一个网址:
http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol%C3%A9on.jpg
使用以下代码保存到json文件中:
paintings = get_all_paintings(marc_chagall)
with open('chagall.json', 'w') as fb:
x = json.dump(paintings, fb)
在文件中,URL已变为:
u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg'
我可以使用以下代码获取原始的,可用的,百分比编码的URL:
p = u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg'
p = urllib.quote(p.encode('utf8'), safe='/:')
print repr(p)
> 'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol%C3%A9on.jpg'
现在是棘手的部分。我想得到这个字符串:
http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napoléon.jpg
在napoléon完整的非ascii字符。这是用于存储桶中的命名目的,而不是用于任何其他目的。我怎样才能产生这个字符串?
答案 0 :(得分:4)
只需打印unicode值:
>>> print u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg'
http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napoléon.jpg
不要将Unicode值的python 表示(故意使用非ASCII字符的转义符以便于调试和内省)与实际值混淆。
打印将值编码到控制台或终端使用的编解码器,前提是Python能够检测到它。我的终端设置为UTF-8,因此Python将U + 00E9 unicode代码点编码为C3 A9字节,然后我的终端将其解释为UTF-8并显示é
。
这一切只是意味着已经拥有正确的值,但是被调试输出抛出了。
答案 1 :(得分:1)
你已经拥有它:
print u'http://uploads4.wikiart.org/images/marc-chagall/kopeikin-and-napol\xe9on.jpg'
p
的值已经是该字符串,它的显示方式不同。