下面是两个代码示例,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:
这意味着您没有写出拉丁语-1数据,或者您的源代码被保存为UTF-8,但是您声明了您的脚本(使用PEP 263-compliant header来代替拉丁语-1)。
如果您保存的Python脚本的标题如下:
但是文本编辑器用UTF-8编码保存了文件,然后是字符串文字:
也会被Python以同样的方式曲解。将得到的unicode值保存为拉丁-1并将其再次读取为拉丁-1将保留错误。
要调试,请仔细查看第一个脚本中的
print(s.encode('unicode_escape'))
。如果它看起来像:然后你的源代码编码和PEP-263头在如何解释源代码上有分歧。如果源代码解码正确,则正确输出为:
如果Spyder顽固地忽略PEP-263头并将源代码读取为拉丁文-1而不管,请避免使用非ASCII字符并改用转义码;或者使用
\uxxxx
unicode代码点:或
\xaa
256以下代码点的单字节转义码:相关问题 更多 >
编程相关推荐