Win10下Python3.6写入UTF-8文件被识别为ANSI如何修复?
问题分析与解决方案
我之前也踩过类似的坑,咱们来捋清楚问题根源和解决办法:
为什么会出现编码识别差异?
核心原因在于**UTF-8 BOM(字节顺序标记)**的存在与否:
- 当你写入的内容全是ASCII范围内的字符时,Python用
encoding='utf-8'写入的文件不会自动添加UTF-8 BOM。EditPlus这类编辑器对编码的判断比较“保守”——没有BOM的纯ASCII文件,它会默认识别为ANSI;而Notepad++有更智能的编码检测逻辑,能判断出这是UTF-8。 - 当你写入Ž、Ǧ这类非ASCII字符时,文件里出现了超出ANSI范围的字节,编辑器就能明确识别出这是UTF-8编码,所以不会误判。
接收程序报错,大概率也是因为它依赖BOM来识别UTF-8编码,纯ASCII无BOM的文件被当成了ANSI处理,导致解析出错。
快速解决办法
把代码里的编码参数改成utf-8-sig,Python会自动在文件开头添加UTF-8 BOM,这样不管内容有没有特殊字符,EditPlus和接收程序都能正确识别为UTF-8:
with open(TXT_DESTINATION, 'w', encoding='utf-8-sig', newline='\n') as output: output.write(mythings)
验证效果
修改后再生成文件:
- EditPlus打开时会显示编码为UTF-8
- 接收程序也能正确解析文件内容,不会再报错
内容的提问来源于stack exchange,提问作者Tom Leung
相关产品推荐
相关产品推荐

