Python如何向TXT文件写入Unicode字符并实现追加写入?
解决UnicodeEncodeError并实现ASCII/Unicode字符的正确写入
首先,你遇到的UnicodeEncodeError: 'charmap' codec can't encode character '\u2212'问题,核心原因是Windows环境下Python默认用cp1252编码打开文件,而这个编码无法覆盖所有Unicode字符(比如你碰到的\u2212是Unicode形式的减号)。同时你的代码还有几个拼写和写法上的小问题,下面一步步帮你解决:
1. 核心修复:指定支持全Unicode的文件编码
要让文件能写入所有ASCII和Unicode字符,且记事本可以正常识别显示,打开文件时必须明确指定encoding='utf-8-sig'——这是带BOM标记的UTF-8编码,Windows记事本会自动识别它,不会出现乱码;如果用普通utf-8,记事本可能会默认用ANSI打开导致字符显示异常。
2. 修正代码中的拼写与写法问题
你的代码里存在变量名/函数名不一致的情况:
create_file函数里的name_tabla、nombre_tabla应该统一为参数传入的name_table- 报错里调用的
escribe_fichero和你定义的write_file是同一个函数,要统一命名
另外,推荐用with语句打开文件,不需要手动调用close(),Python会自动处理文件的关闭,避免资源泄漏。
3. 修正后的完整代码
def write_file(text, name_table): # 用with语句+utf-8-sig编码打开文件,自动管理资源 with open(f"llenado_tabla_{name_table}.txt", "a", encoding='utf-8-sig') as file: file.write(text) def create_file(name_table, atributos): with open(f"llenado_tabla_{name_table}.txt", "w", encoding='utf-8-sig') as file: file.write(f"-- Llenando tabla {name_table}\n") file.write("INSERT INTO\n") file.write(f"{name_table}(") for i in range(len(atributos)): if i == len(atributos) - 1: file.write(f"{atributos[i]}) \n VALUES \n") else: file.write(f"{atributos[i]},") # 示例调用测试 if __name__ == "__main__": create_file("usuarios", ["id", "nombre", "descripcion"]) # 写入包含Unicode特殊字符的内容 write_file("(1, 'María', '爱好:\u2212 数学 \u03A9 物理 \u2764 编程')\n", "usuarios")
4. 效果说明
修改后,你的文件会:
- 正常写入所有ASCII和Unicode字符,不会再出现编码错误
\n会被记事本识别为换行符- 打开文件时记事本会自动用UTF-8编码解析,所有字符正常显示
内容的提问来源于stack exchange,提问作者FJGJFOR
相关产品推荐
相关产品推荐

