2013-03-10 54 views
1

我試圖從一個文件中提交的文本形式在網站上與機械化但文字並不好看那裏,如果我複製粘貼如下:不能保存編碼文本在Python

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

如果我使用的Python代碼如下所示:

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

大概是一些關於編碼,不能使它發揮作用。在原始文件textfile.txt中,編碼是OEM-US,我使用了googled並且是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) 
+0

我有ActivePython 2.5,從我所知道的ASCII,每2.x python是ASCII,只有3.x是unicode。 – Martzy 2013-03-10 16:34:23

+0

抱歉有關誤導性問題。無論如何,您可以在閱讀文本後更改文本的編碼。簡單地解碼並對其進行編碼它('str.decode( 'CP437')。編碼( 'UTF-8')')。這在大多數情況下都會起作用。而且大多數情況下。我的意思是網站。 – StoryTeller 2013-03-10 16:37:15

+0

我剛剛添加了content.decode('cp437')。encode('utf-8'),它在網站上是一樣的:( – Martzy 2013-03-10 16:43:56

回答

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() 

注意I opened該文件處於二進制模式,因此不會將轉換應用於其字節。還要注意,我在MIME類型中指定了假定的編碼。現在取決於服務器代碼來處理代碼轉換(如果有的話)。

+0

事情是,我想把文本放在一個文本框,我不需要上傳文件,我需要閱讀它並將內容發送到文本框。 – Martzy 2013-03-10 17:09:17

+0

如果我使用記事本打開該文件++和選擇其他編碼比OEM美,看起來像地獄。只有當我從OEM-US複製粘貼看起來像第一篇文章時,從其他編碼就像腳本那樣。 – Martzy 2013-03-10 17:16:48

+0

因爲根據解碼方案,字節的相同序列表示不同的字符。查看更新後的答案,從您的文件中構建一個unicode字符串(可能代表您的*陌生*文本)。 – Raffaele 2013-03-10 17:25:24

1

是的,看起來像機械化的問題。在CMD我可以打印出來,因爲我想就是這樣的,沒有統一代碼..

content = file.read() 
print content 

但是當我通過mecanize發送,在網站上它是不一樣的。

隨着忽略標誌,一切都被跳過,但文本。 錯誤說,ascii無法編碼這些字符..