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

为何基于configparser的配置读取函数在macOS正常Windows异常?

配置文件跨平台编码问题排查

问题背景

我编写了一个基于configparser读取配置文件的函数,该函数在macOS系统可正常运行,但在Windows系统下出现文件编码问题。

初始读取配置函数

def getSetting(name,section):
    cpass = configparser.RawConfigParser()
    cpass.read('data/settings.data', encoding='UTF-8')
    

    value = 'False'

    for each_section in cpass.sections():
        for (each_key, each_val) in cpass.items(each_section):
            if each_section == section and each_key == name:
                value = each_val

    if name == 'log' and value == 'False':
        value = translations['disabilitato_first_cap']
        
    return value

尝试的修改方案

我调整了读取逻辑,并在Python文件顶部添加编码声明,但问题仍未解决。

修改后的读取函数

def getSetting(name,section):
    cpass = configparser.RawConfigParser()

    with open('data/settings.data', 'r', encoding='utf-8') as f:
        cpass.read_file(f)

        value = 'False'

        for each_section in cpass.sections():
            for (each_key, each_val) in cpass.items(each_section):
                if each_section == section and each_key == name:
                    value = each_val

        if name == 'log' and value == 'False':
            value = translations['disabilitato_first_cap']
            
    return value

文件顶部添加的编码声明

# -*- coding: utf-8 -*-

配置文件生成函数

以下是生成配置文件的checkSettings函数代码:

def checkSettings(if_false_create):
    cpass = configparser.RawConfigParser()
    try:
        with open('data/settings.data', encoding="UTF-8") as f:
            cpass.read_file(f)
            return True
    except IOError:
        print(colors.wy+" "+translations['impostazioni_base_configurate'])
        if if_false_create == False:
            return False
        else:
            log = translations['disabilitato_first_cap']
            settings = configparser.RawConfigParser()
            settings.add_section("general_settings")
            settings.set("general_settings", "log", translations['disabilitato_first_cap'])
            settings.set("general_settings", "analyze_account", "doublegram_test_user")
            settings.set("general_settings", "between_autoinvite_pause", "1-3 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            settings.set("general_settings", "between_invite_pause", "1-3 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            setup = open("data/settings.data", "w")
            settings.write(setup)

            settings.add_section("adding_settings")
            settings.set("adding_settings", "between_autoinvite_pause", "1-3 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            settings.set("adding_settings", "auto_add_at_start", translations['abilitato_first_cap'])
            settings.set("adding_settings", "if_account_out", translations['abilitato_first_cap'])
            settings.set("adding_settings", "change_account_n_requests", "20 "+translations['richieste'])
            settings.set("adding_settings", "change_account_pause", "1-5 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            settings.set("adding_settings", "consecutive_error_breaker", "30 "+translations['errori'])
            settings.set("adding_settings", "start_point_members_file", translations['da_interrotto'])
            settings.set("adding_settings", "add_using", translations['user_id_opt'])
            settings.set("adding_settings", "between_adding_pause", "1-3 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            settings.set("adding_settings", "casual_pause_times", "3-120 "+translations['abbreviazione_secondi']+" ("+translations['casuale']+")")
            settings.set("adding_settings", "exclude_bot", translations['abilitato_first_cap'])
            settings.set("adding_settings", "exclude_admin", translations['abilitato_first_cap'])
            settings.set("adding_settings", "photo_forcing", translations['abilitato_first_cap'])
            settings.set("adding_settings", "filter_last_seen", translations['nessuna_restrizione'])
            settings.set("adding_settings", "filter_dc", translations['nessuna_restrizione'])
            settings.set("adding_settings", "filter_phone_number", translations['disabilitato_first_cap'])
            settings.set("adding_settings", "stop_max_adding", translations['nessun_limite'])
            settings.set("adding_settings", "continuous_adding", translations['disabilitato_first_cap'])
            settings.set("adding_settings", "ca_ripet", translations['infinito'])
            settings.set("adding_settings", "ca_pause", translations['nessuna_pausa'])
            setup = open("data/settings.data", "w")
            settings.write(setup)
            
            setup.close()
            return log

内容的提问来源于stack exchange,提问作者Jack Sparviero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:46