你正在編碼你的字符串兩次,這兩個都是不必要的。固定的代碼看起來像:
texto = '01REMESSA01COBRAN\N{LATIN CAPITAL LETTER C WITH CEDILLA}A ...'
with open(arquivo, 'w', encoding='ISO-8859-1') as text_file:
text_file.write(texto)
我假設你正在使用Python3因爲你原來的字符串中有一個文字Ç
這不會在Python2被允許。 Python3中的所有字符串都是Unicode,除非有特殊的前綴(例如b'these are octets'
)。一般來說,你應該儘可能長的保留unicode字符串,在這種情況下,直到你必須寫一個字節文件。
要儘可能延遲編碼,open
允許encoding=
選項。我喜歡那是指定的文件的編碼,所以如果你正在閱讀或寫作它只是做正確的事情。這使我們可以添加
# confirm we read what we meant
print(open(arquivo, encoding='latin-1').read())
只是工作。請注意,'ISO-8859-1'
和'latin-1'
是Python中的相同編碼;類似地,\N{CAPITAL...}
和'Ç'
也是相同的,前者出於示例目的更加明顯。
我諮詢了Python Unicode HOWTO以確保我記得正確。我建議你閱讀它。由Nick Coghalan的「Processing Text Files in Python 3」解釋的原因,你可能應該忘記cp1252。
來源
2017-08-07 04:50:46
msw
你怎麼知道這些是'?'字符?你確定你正在用ISO8859-1編碼查看你的輸出文件嗎? –
這是輸出使用編碼'mbcs''01REMESSA01COBRANÃ?A ......' –