为何基于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
相关产品推荐
相关产品推荐

