Python unicode文本的奇怪行为
基本上我有这个代码:Python unicode文本的奇怪行为,python,xpath,lxml,Python,Xpath,Lxml,基本上我有这个代码: page = requests.get("some_url" ) tree = html.fromstring(page.content) fo = codecs.open("path to file", "w", encoding='utf8') txt = tree.xpath("some_xpath_expr") fo.write( txt ) fo.close() 它将xpath保存到文件中。但当我这样做的时候: txt=page.content而不是t
page = requests.get("some_url" )
tree = html.fromstring(page.content)
fo = codecs.open("path to file", "w", encoding='utf8')
txt = tree.xpath("some_xpath_expr")
fo.write( txt )
fo.close()
它将xpath保存到文件中。但当我这样做的时候:
txt=page.content
而不是txt=tree.xpath()
,当我写入文件时,它返回
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0
因此,如果我这样做:
txt=page.content.encode(“utf8”)
它又能正常工作了
所以,我的问题是为什么会发生这种情况?我的意思是
树.xpath
是否返回unicode字符串,而请求.get()是否返回unicode字符串?我很困惑。page.content
提供二进制/字节响应内容,而不是文本响应内容。您可能希望使用page.text
而不是page.content
。当某些内容需要文本,而您为其指定了字节时,python通常会尝试使用ascii编解码器将字节转换为文本,但您的案例失败了,因为内容不是ascii编码的(可能是utf-8)。通过查看page.encoding
,可以检查使用了什么响应编码,但是如果直接使用page.text
,则不需要关心使用了什么编码
参考文献:
page.content
提供二进制/字节响应内容,而不是文本响应内容。您可能希望使用page.text
而不是page.content
。当某些内容需要文本,而您为其指定了字节时,python通常会尝试使用ascii编解码器将字节转换为文本,但您的案例失败了,因为内容不是ascii编码的(可能是utf-8)。通过查看page.encoding
,可以检查使用了什么响应编码,但是如果直接使用page.text
,则不需要关心使用了什么编码
参考文献:
也许我误解了你的问题,但你是说当你执行两行page=requests.get(“some_url”)
然后紧接着txt=page.content
,你会看到UnicodeDecodeError
?这不可能是对的:您所做的只是将page.content
绑定到另一个变量txt
。不应该在那里进行字符编码/解码。@mhawke是的,这个问题有误导性,我编辑了它。谢谢也许我误解了你的问题,但你是说当你执行两行page=requests.get(“some_url”)
然后紧接着txt=page.content
,你会看到UnicodeDecodeError
?这不可能是对的:您所做的只是将page.content
绑定到另一个变量txt
。不应该在那里进行字符编码/解码。@mhawke是的,这个问题有误导性,我编辑了它。谢谢