簡體   English   中英

如何從Windows-1252文件讀取®字符並將其寫入UTF-8文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM