You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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++)查看文件的编码类型,再对应调整参数。

额外提示

如果后续升级到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:04:02