为何importlib.resources.read_text仅在Windows抛出UnicodeDecodeError?
问题原因与解决方案
为什么Windows会出现这个错误?
importlib.resources.files.read_text()不指定编码时,Windows会默认使用当前系统的ANSI字符集(比如GBK、CP1252等),而非UTF-8——这和macOS/Linux默认采用UTF-8的行为存在差异。你的UTF-8编码文件里的特殊字符(比如←、•),用Windows系统默认编码解码时自然会触发UnicodeDecodeError。
你提到的0x90字节,在CP1252编码中属于未定义字符,但它是UTF-8编码下某个特殊字符的组成部分,解码失败也就必然发生。
解决方案
直接在read_text()中显式指定编码为utf-8,强制用UTF-8解码,不受系统默认编码影响:
importlib.resources.files(...).read_text(encoding='utf-8')
这样就能保证所有系统环境下都用UTF-8读取文件,彻底解决编码不一致的问题。
关于带变音符号的翻译文件
同理,只要你的翻译文件是UTF-8编码,必须显式指定encoding='utf-8',避免Windows用系统默认编码读取导致变音符号乱码或解码失败。
另外建议确保所有资源文件(JS、翻译文件等)都保存为UTF-8无BOM格式,BOM可能引发额外的编码问题。
内容的提问来源于stack exchange,提问作者Russell Owen
相关产品推荐
相关产品推荐

