网址组件%和\ x

时间:2015-12-20 09:05:44

标签: python urllib2 urllib

我有疑问。

st = "b%C3%BCrokommunikation"
urllib2.unquote(st)

输出:'b \ xc3 \ xbcrokommunikation' 但是,如果我打印它:

print urllib2.unquote(st)

输出:bürokommunikation

为什么会有区别? 我必须将bürokommunikation而不是'b \ xc3 \ xbcrokommunikation'写入文件。

我的问题是: 我有很多数据,这些数据是从URL中提取的。我必须将它们存储为例如。 bürokommunikation到文本文件。

2 个答案:

答案 0 :(得分:2)

您正在查看相同的结果。当您尝试在没有打印命令的情况下打印它时,它只显示__repr__()结果。当您使用print时,它会显示unicode字符,而不是使用\ x

转义它

答案 1 :(得分:2)

当您print字符串时,您的终端仿真程序会识别unicode字符\xc3\xbc并正确显示它。

但是,正如@MarkDickinson在评论中所说,ü并不存在于ASCII中,因此您需要告诉Python您要写入文件的字符串是unicode编码的,以及您要使用的编码格式,例如UTF-8

使用codecs库非常容易:

import codecs

# First create a Python UTF-8 string
st = "b%C3%BCrokommunikation"
encoded_string = urllib2.unquote(st).decode('utf-8')

# Write it to file keeping the encoding
with codecs.open('my_file.txt', 'w', 'utf-8') as f:
    f.write(encoded_string)