我有一個包含'®'字符的Windows-1252編碼輸入文件。我需要將此字符寫入UTF-8文件。還假設我必須使用Python 2.7。看起來很簡單,但我不斷收到UnicodeDecodeErrors。如何從Windows-1252文件中讀取®字符並寫入UTF-8文件
我原本只是打開使用codecs.open()
使用UTF-8編碼,它工作得很好了所有的ASCII字符,直到它遇到®符號,於是它用錯誤哽咽原始文件:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xae in position 2867043:
invalid start byte
我知道我必須正確解碼它作爲cp1252來解決這個問題,所以我打開它以適當的編碼,然後在寫入之前將數據編碼爲UTF-8。但是,這產生了新的錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 22:
ordinal not in range(128)
這裏是一個最低工作例如:
with codecs.open('in.txt', mode='rb', encoding='cp1252') as inf:
with codecs.open('out.txt', mode='wb', encoding='utf-8') as of:
for line in inf:
of.write(line.encode('utf-8'))
這裏是in.txt
內容:
Sample file
Here is my sample file® yay.
我想也許我可以打開它在'rb'模式中沒有指定編碼,並且具體處理每條線的解碼和編碼,如下所示:
of.write(line.decode('cp1252').encode('utf-8'))
但這也不起作用,給出與我剛剛打開UTF-8時相同的錯誤。
如何從Windows-1252文件讀取數據,正確解碼並將其編碼爲UTF-8並將其寫入UTF-8文件?上述方法在過去一直爲我工作,直到我遇到了®角色。
這解決了這個問題,但你能幫助我更好地理解一點。編解碼器以某種方式處理我的編碼?附:我會接受這一點,但它不會讓我多幾分鐘。 –
@BobDylan:是的,在飛行中進行en /解碼是編解碼器包的**作業**。閱讀文檔! –
是的,我嘗試瞭解更多,但文檔似乎只記錄所有的方法。關於它是如何工作的並沒有真正的(低級別)描述。如果你有任何解釋它的鏈接,而不僅僅是列出所有的方法,並簡要描述他們做什麼,但不知道它們是如何工作的,我想了解更多。沒有biggie,如果沒有,這是我接受的答案,我很欣賞你的時間。 –