社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

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 .