如何向文本文件写入自定义符号/表情并解决UnicodeEncodeError报错
报错原因
该报错是因为Python打开文件时默认调用了操作系统原生编码(Windows平台下默认为GBK/CP936,也就是报错中提到的charmap编码),这类编码的字符集未覆盖⚡等emoji的编码映射,因此写入时触发编码异常。
注意:你提到的「UTF-8编码会将表情转换为一串普通文本」属于认知误区,该现象是打开文件的编辑器/查看工具不支持emoji渲染导致的展示问题,UTF-8本身会完整保留emoji的Unicode码点,使用支持emoji渲染的工具打开文件即可正常显示表情。
解决方案
方案1(优先推荐):指定UTF-8编码写入文件
打开文件时显式指定encoding="utf-8"即可解决编码不兼容问题,示例代码:
with open("存储文本.txt", "w", encoding="utf-8") as MyTextFile: MyTextFile.write("⚡")
如果打开文件时看到的是转义字符/乱码,更换为VS Code、Notepad++等支持emoji渲染的编辑器即可正常查看表情。
方案2(必须使用非UTF-8编码时选择):指定编码错误处理规则
如果业务要求必须使用系统默认编码/其他非UTF-8编码,可在打开文件时通过errors参数指定无法编码字符的处理策略:
errors="ignore":直接丢弃所有无法编码的emoji字符errors="replace":用?符号替换所有无法编码的emoji字符errors="backslashreplace":用Unicode转义序列(如\u26a1)替换无法编码的emoji,后续读取文件时可通过解码规则还原为原表情
示例代码:
# 示例:用?替换无法编码的字符 with open("存储文本.txt", "w", errors="replace") as MyTextFile: MyTextFile.write("⚡")
内容的提问来源于stack exchange,提问作者Eskimo868
相关产品推荐
相关产品推荐

