Windows系统下Python如何无需指定编码正确读文本文件或优化写入?
实现类似记事本的自动编码识别读取功能(Python)
我了解到无法准确判定文本编码,但像记事本这类程序却能正确读取UTF-8编码的文件,希望在Python中实现同样的效果。
Python的open函数无法做到这一点,Python 3.11文档指出其默认使用系统本地编码,我的机器上为cp1252,该行为不依赖文件中的BOM或其他元数据。
以下代码在Python 3.7、3.10和3.11版本中表现一致:
fname = "tmpWindowsOut.txt" with open(fname, "w", encoding="utf-8") as f: # 如果open里不指定encoding,这里会抛出臭名昭著的UnicodeEncodeError: # UnicodeEncodeError: 'charmap' codec can't encode character '\u03b2' in position 1: character maps to <undefined> f.write("βKHα") with open(fname, "r") as f: print(f.read()) # 输出 βKHα # 用记事本打开这个文件却能显示正确内容
我知道可以通过给open调用传入encoding参数来正确读取文件,但我的问题并非如何读取已知为UTF-8编码的文件。我想实现以下任一目标:
- 无需指定编码即可正确完成读取操作
- 调整写入操作,使第一个目标更容易(甚至可行)
内容的提问来源于stack exchange,提问作者julaine
相关产品推荐
相关产品推荐

