gpt4 book ai didi

python - 在以 latin1 编码的文件中写入然后读取字符串

转载 作者:太空狗 更新时间:2023-10-30 03:03:49 34 4
gpt4 key购买 nike

这里有 2 个代码示例,Python3:第一个使用 latin1 编码编写两个文件:

s='On écrit ça dans un fichier.'
with open('spam1.txt', 'w',encoding='ISO-8859-1') as f:
print(s, file=f)
with open('spam2.txt', 'w',encoding='ISO-8859-1') as f:
f.write(s)

第二个读取具有相同编码的相同文件:

with open('spam1.txt', 'r',encoding='ISO-8859-1') as f:
s1=f.read()
with open('spam2.txt', 'r',encoding='ISO-8859-1') as f:
s2=f.read()

现在,打印 s1 和 s2 我得到

On écrit ça dans un fichier.

而不是最初的“On écrit ça dans un fichier。”

怎么了?我也尝试过 io.open 但我错过了一些东西。有趣的是,我对 Python2.7 及其 str.decode 方法没有这样的问题,现在已经消失了......

有人可以帮助我吗?

最佳答案

您的数据以 UTF-8 格式写出:

>>> 'On écrit ça dans un fichier.'.encode('utf8').decode('latin1')
'On écrit ça dans un fichier.'

这意味着您没有写出 Latin-1 数据,或者您的源代码被保存为 UTF-8 但您声明了您的脚本(使用 PEP 263-compliant header 改为 Latin-1。

如果您使用如下 header 保存 Python 脚本:

# -*- coding: latin-1 -*-

但是您的文本编辑器使用 UTF-8 编码保存了文件,然后是字符串文字:

s='On écrit ça dans un fichier.'

也会以同样的方式被 Python 误解。将生成的 unicode 值作为 Latin-1 保存到磁盘,然后作为 Latin-1 再次读取它会保留错误。

要进行调试,请仔细查看第一个 脚本中的print(s.encode('unicode_escape'))。如果它看起来像:

b'On \\xc3\\xa9crit \\xc3\\xa7a dans un fichier.'

然后您的源代码编码和 PEP-263 header 不同意应如何解释源代码。如果您的源代码被正确解码,则正确的输出是:

b'On \\xe9crit \\xe7a dans un fichier.'

如果 Spyder 顽固地忽略 PEP-263 header 并将您的源代码读取为 Latin-1 regardless,请避免使用非 ASCII 字符并改用转义码;使用 \uxxxx unicode 代码点:

s = 'On \u00e9crit \u007aa dans un fichier.'

\xaa 256 以下代码点的单字节转义码:

s = 'On \xe9crit \x7aa dans un fichier.'

关于python - 在以 latin1 编码的文件中写入然后读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17790303/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com