如何让Python正确读取含法语字符的文件变量?
解决Python读取含法语字符变量文件的问题
这个问题的核心是文件编码不匹配:Python 2的原生open函数默认使用系统编码读取文件,而包含法语特殊字符(é、ç等)的文件通常是UTF-8或西欧编码(如cp1252、Latin-1),两者不兼容就会导致解析失败。以下是针对你的代码的修复方案:
修改后的完整代码
#!/usr/bin/python import imp import io # 导入io模块以支持指定编码读取文件 def getVarFromFile(filename): # 明确指定文件编码打开,这里假设文件是UTF-8编码,根据实际情况调整 f = io.open(filename, 'rt', encoding='utf-8') global data # 第二个参数传空字符串即可,原代码的" "不影响但没必要 data = imp.load_source('data', '', f) f.close() return def main(): getVarFromFile('test.txt') print data.Title print data.Language print data.Summary return if __name__ == "__main__": main()
关键修改说明
- 替换
open为io.open:Python 2的io.open支持显式指定编码,能避免系统默认编码与文件实际编码不匹配的问题。 - 确认文件实际编码:你需要先确定
test.txt的编码:- 如果是用通用格式保存的(比如UTF-8无BOM),保持
encoding='utf-8'即可; - 如果是Windows下生成的法语文件,可能是
cp1252编码,改成encoding='cp1252'; - 如果是老式西欧编码,用
encoding='latin-1'(ISO-8859-1)。
可以用文本编辑器(如Notepad++)查看文件的编码类型,再对应调整参数。
- 如果是用通用格式保存的(比如UTF-8无BOM),保持
额外提示
如果后续升级到Python 3,imp模块已经被弃用,建议改用importlib.machinery.SourceFileLoader来实现相同功能,示例代码如下(供参考):
import importlib.machinery def getVarFromFile(filename): loader = importlib.machinery.SourceFileLoader('data', filename) data = loader.load_module() return data def main(): data = getVarFromFile('test.txt') print(data.Title) print(data.Language) print(data.Summary) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者Ga Mmeeu
相关产品推荐
相关产品推荐

