你正在编码你的字符串两次,这两个都是不必要的。固定的代码看起来像:
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 ......' –