Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python unicode文本的奇怪行为_Python_Xpath_Lxml - Fatal编程技术网

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是的,这个问题有误导性,我编辑了它。谢谢