Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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/4/kotlin/3.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 Django和lxml中的解码问题_Python_Django_Utf 8_Lxml_Decoding - Fatal编程技术网

Python Django和lxml中的解码问题

Python Django和lxml中的解码问题,python,django,utf-8,lxml,decoding,Python,Django,Utf 8,Lxml,Decoding,在使用部署的Django应用程序版本时,lxml有一个奇怪的问题。我使用lxml解析从服务器获取的另一个HTML页面。这在我自己的计算机上的开发服务器上运行得非常好,但出于某种原因,它在服务器上给了我UnicodeDecodeError ('utf8', "\x85why hello there!", 0, 1, 'unexpected code byte') 我已经确保Apache(使用mod_python)使用LANG='en_US.UTF-8'运行 我已经尝试过用谷歌搜索这个问题,并尝试

在使用部署的Django应用程序版本时,lxml有一个奇怪的问题。我使用lxml解析从服务器获取的另一个HTML页面。这在我自己的计算机上的开发服务器上运行得非常好,但出于某种原因,它在服务器上给了我
UnicodeDecodeError

('utf8', "\x85why hello there!", 0, 1, 'unexpected code byte')
我已经确保Apache(使用mod_python)使用
LANG='en_US.UTF-8'
运行

我已经尝试过用谷歌搜索这个问题,并尝试了不同的方法来正确解码字符串,但我无法找到答案


在您的回答中,您可能会假设我的字符串名为
hello
或其他什么。

由于修改site.py不是一个理想的解决方案,请在程序开始时尝试以下方法:

import sys
reload(sys)
sys.setdefaultencoding("utf-8")

“\x85why hello here!”不是utf-8编码的字符串。在将网页传递给lxml之前,您应该尝试对其进行解码。获取页面时,通过查看http头检查它使用了什么编码,也许您会发现问题所在。

诸如
u“\x85why hello here!”之类的语法不存在吗?
帮助

您可能会发现官方Python文档中的以下资源非常有用:


有趣!您不知道我的程序在Django中的开始是什么?在调用任何与lxml相关的代码之前调用此代码应该可以解决此问题。为什么在导入后立即调用reload?是否应该在sys.setdefaultencoding之后调用它?需要重新加载(sys)的原因是python的站点模块专门删除了它。这是因为使用setdefaultencoding的客户端代码就像一只拿着枪的猴子。请阅读,不要这样做。同意。请尝试“\x85为什么在那里打招呼!”。解码(“utf-8”)。这将把非unicode代码(\x85)更改为unicode代码。您可能还需要在.py文件的顶部添加:“#--coding:utf-8-->”(不带引号)。我同意这可能是因为您返回的字节字符串实际上不是utf-8。一般来说,如果您声称要创建UTF-8字符串,那么您应该在内部使用unicode类型,并且在将位放到线路上之前,将其编码为UTF-8。如果你把字节串拼凑在一起,你几乎肯定会在某个地方搞砸,然后在很久以后的某个地方发现它。FWIW,“\x85”==“#”。