1

I am trying to submit text from a file to a form on a site with mechanize but the text doesn't look good there, if i copy-paste looks like this:

                                   ████                                     
                                  █⌡⌡⌡⌡████                                 
                                 █⌡⌡⌡⌡⌡⌡⌡⌡⌡█████                            
                                █⌡⌡⌡⌡⌡████⌡⌡⌡⌡⌡⌡████                        
                                █⌡⌡⌡██    ██⌡⌡⌡⌡⌡⌡⌡⌡█████                   
                               █⌡⌡⌡⌡█      █⌡⌡⌡⌡██⌡⌡⌡⌡⌡⌡⌡████

If i use the code Python looks like this:

                              ����                                     
                              ���������                                 
                             ���������������                            
                            ��������������������                        
                            ������    ���������������                   
                           ������      ������������������               
        �����             ������        ���������������������           
    �������������        ��������      ���������������������������      

Probably is something about encoding,can't make it work. In the original file,textfile.txt, encoding is OEM-US, i googled this and is cp437.

def functionaa(linksite, text):
    import mechanize 
    import cookielib
    # Browser 
    br = mechanize.Browser()
    # Cookie Jar
    cj = cookielib.LWPCookieJar() 
    br.set_cookiejar(cj) 
    # Browser options 
    br.set_handle_equiv(True) 
    br.set_handle_gzip(True) 
    br.set_handle_redirect(True) 
    br.set_handle_referer(True) 
    br.set_handle_robots(False) 
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1) 
    edit = br.open(link)
    html1 = edit.read()
    br.select_form(nr=0) 
    br.form['textcode'] = "[pre]%s[/pre]" % text
    br.submit() 

f=open(r'E:\ABC\textfile.txt', 'r')
content = f.read()
functionaa("http://site.com", content)
4

2 回答 2

1

是的,看来是机械化的问题。在 CMD 中,我可以像这样打印它,无需 unicode ..

content = file.read()
print content

但是当我通过 mecanize 发送它时,在网站上它是不一样的。

使用忽略标志,所有内容都被跳过,但文本。错误说,ascii 无法编码这些字符..

于 2013-03-11T02:27:25.363 回答
0

如果您只想上传文件内容,就像用户在文本控件中手动键入一样,您应该首先确保处理代理假定的字符集可以代表您的奇怪字符。如果是这种情况,您可以转到第 2 步并以这种方式读取本机 Python 字符串中的文件内容:

file = open(filename, 'rb')
content = unicode(file.read(), 'cp437')
file.close()
# Now use "content" to fill the form

相反,这是您应该如何上传文件的方式:

def upload(action, filename):
  br = mechanize.Browser()
  br.form.add_file(open(filename, 'rb'), 'text/plain; charset=cp437', filename)
  # Do your work...
  br.submit()

请注意,我以二进制模式打开文件,因此不会对其字节应用任何转换。另请注意,我在 MIME 类型中指定了假定的编码。现在由服务器代码来处理转码(如果有的话)。

于 2013-03-10T16:55:43.210 回答