无法在Python中保留编码文本

时间:2013-03-10 16:26:07

标签: python encoding

我正在尝试将文件从文件提交到带有机械化的网站上的表单,但文本看起来不太好,如果我复制粘贴看起来像这样:

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

如果我使用代码,Python看起来像这样:

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

可能是关于编码的东西,不能使它工作。在原始文件中,textfile.txt,编码是OEM-US,我用Google搜索并且是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)

2 个答案:

答案 0 :(得分:1)

是的,看起来像机械化的问题。在CMD中,我可以像我一样打印它,没有unicode ..

content = file.read()
print content

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

使用ignore标志,所有内容都会被跳过但文本。 错误说,ascii不能编码那些字符..

答案 1 :(得分:0)

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

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

相反,这就是you should upload您的文件的方式:

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

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