[英]How to read ® character from Windows-1252 file and write to UTF-8 file
我有Windows-1252編碼的輸入文件,其中包含'®'字符。 我需要將此字符寫入UTF-8文件。 還要假設我必須使用Python 2.7。 似乎很容易,但我一直收到UnicodeDecodeErrors。
我最初只是使用帶有UTF-8編碼的codecs.open()
打開了原始文件,該文件對於所有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文件? 在我遇到®字符之前,以上方法一直對我有用。
如果0xC2應該代表®
字符,則您的文件不在Windows-1252中;否則,您的文件不在Windows-1252中。 在Windows 1252,為0xC2是Â
。
但是,您應該只使用
of.write(line)
因為正確編碼是您首先使用codecs
的全部原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.