2012-02-27 131 views
1

的情况,我送POST请求,并试图获取与Python的响应 问题是,它扭曲了非拉丁字母,当我取得与直接链接在同一页不发生(没有搜索结果),但POST请求不会生成链路的Python POST请求编码

这里是我做的:

import urllib 
import urllib2 
url = 'http://donelaitis.vdu.lt/main_helper.php?id=4&nr=1_2_11' 
data = 'q=bus&ieskoti=true&lang1=en&lang2=en+-%3E+lt+%28+71813+lygiagre%C4%8Di%C5%B3+sakini%C5%B3+%29&lentele=vertikalus&reg=false&rodyti=dalis&rusiuoti=freq' 
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
the_page = response.read() 
file = open("pagesource.txt", "w") 
file.write(the_page) 
file.close() 

每当我试图

thepage = the_page.encode('utf-8') 

我得到这个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 1008: ordinal not in range(128) 

每当我试图做变化的响应报头的Content-Type:text/html的;字符集= UTF-8,我做

response['Content-Type'] = 'text/html;charset=utf-8' 

我得到这个错误:

AttributeError: addinfourl instance has no attribute '__setitem__' 

我的问题:是否可以编辑或删除响应或请求标题? 如果没有,是否有另一种方法来解决这个问题,其他复制源到记事本++和手动固定编码?

我是新来的Python和数据挖掘,真希望你让我知道如果我; M做错事

感谢

回答

1

两件事情。首先,你不想编码的响应,你要对它进行解码:

thepage = the_page.decode('utf-8') 

其次,你不想设置页眉上的反应,将其设置上的要求,使用add_header方法:

req.add_header('Content-Type', 'text/html;charset=utf-8') 
+0

当我向请求添加标题时,它返回没有搜索结果的页面。 我想改变响应头文本/ html;字符集= UTF-8“到 'text/html的',bacause附加字符集= UTF-8可能是造成问题的原因,没有? – Earl 2012-02-27 11:38:03

+1

这可能意味着更改您已阅读的回复的标题?我根本不懂。 – 2012-02-27 11:53:41

+0

嗯,我的意思是莫名其妙地检索如果没有编码线的响应...不知道寿,如果能够帮助或者是技术上posibble在所有 – Earl 2012-02-27 12:03:53

2

为什么不试试你的thepage = the_page.decode('utf-8')代替encode因为你要的是从UTF-8编码的文本为Unicode移动 - 编码无关 - 内部字符串?

+0

我试图解码(“UTF-8”),以及,我得到这个错误: UnicodeDecodeError:'utf8'无法解码位置7281-7282中的字节:无效的连续字节 – Earl 2012-02-27 11:33:18