2013-04-29 34 views
0

我有一個文本是HTML的一部分。我想將它保存到一個文件中。Ascii編解碼器無法解碼HTML時保存到Python中的文件

這在Eclipse的調試模式下工作正常,但在運行時從shell失敗。我正在使用一個失敗的html的簡短例子。

xx = '<input type="hidden" name="charset_test" value="€,´,€,´,水,Д,Є" />' 
with codecs.open('myfile.htm'), 'wb', encoding="utf-8") as output: 
    output.write(data) 

,我也得到:

Exception 'ascii' codec can't decode byte 0xe2 in position XXX: ordinal not in range(128) 

其中XXX是如歐元標誌的「奇怪」的符號,相關文件的位置。

這是爲什麼這是從Eclipse而不是從shell工作?我該如何解決這個問題?

我試圖

HTMLParser.HTMLParser().unescape() 
unquote() 
unicode() 

毫無效果......

+0

'xx'是代碼中的一個實際變量還是你給出的文件的一個片段? – 2013-04-29 13:56:00

+0

這只是一個片段,我使用XXX位置放大了它,因爲原始文件是一個非常大的文件 – eran 2013-04-29 17:12:52

+0

您還沒有解決問題嗎?你正在處理的文件,它的編碼是什麼? – 2013-04-29 17:25:13

回答

1

下面的代碼對我的作品......

# coding=utf-8 

import codecs 

data = '<input type="hidden" name="charset_test" value="€,´,€,´,水,Д,Є" />' 
with codecs.open('myfile.htm', 'wb', encoding="utf-8") as output: 
    output.write(data.decode('utf-8')) 

...但如果源數據已經是UTF- 8編碼,並且您還希望編寫UTF-8數據,則無需將其解碼爲Python對象,然後重新編碼回UTF-8。你可以做...

# coding=utf-8 

data = '<input type="hidden" name="charset_test" value="€,´,€,´,水,Д,Є" />' 
with open('myfile.htm', 'wb') as output: 
    output.write(data) 
相關問題