私信  •  关注

lenz

lenz 最近创建的主题
lenz 最近回复了
6 年前
回复了 lenz 创建的主题 » 使用utf-8字符串写入文件时出现python编解码器错误

我知道你想要两样东西:

  • 一种将任意Unicode字符写入文件的方法,以及
  • python 2/3兼容性。

使用 open('out1.txt','w') 同时违反:

  • 输出文本流是用默认编码打开的,在您的平台(显然是windows)上正好是cp-1252。此编解码器仅支持Unicode的一个子集,例如缺少所有表情符号。
  • 这个 open 函数在不同的python版本之间差别很大。在python 3中,它是 io.open 函数,它提供了很多灵活性,例如指定文本编码。在python 2中,返回的文件句柄处理8位字符串,而不是unicode字符串(文本)。
  • 还有一个您可能不知道的可移植性问题:IO的默认编码依赖于平台,即运行代码的人可能会看到不同的默认值,具体取决于操作系统和本地化。

你可以避免这一切 io.open('out1.txt', 'w', encoding='utf8') :

  • 使用支持所有所需字符的编码。使用检测到的输入编码应该可以工作,除非处理引入了支持范围之外的字符。使用其中一个utf编解码器将始终有效,其中utf-8是最广泛用于文本文件的。请注意,一些windows应用程序(如记事本)往往不理解utf-8。
  • 这个 io 模块被移植到Python2.7。这通常符合py2/3兼容,因为对版本<=2.6的支持在相当长一段时间前就已经结束了。
  • 打开文本文件时,请明确使用的编码。在某些情况下,依赖于平台的默认编码是有意义的,但通常需要控制。

边注: 您提到了一个检测输入编解码器的简单启发式方法。 如果实在无法获得这些信息,您应该考虑使用 chardet .