Python写入文件时如何正确保存ąęćż等多语言特殊字符
网页特殊字符写入TXT被替换为�的解决方法
�是编码不匹配的典型报错标记,本质是内容读取、写入环节使用的编码格式不支持对应特殊字符,或是读写环节编码不一致,常见于默认使用GBK、ASCII这类不支持多语言特殊字符的编码处理东欧语种(含ą、ę、ć、ż等波兰语字符)内容的场景,按以下方法处理即可正常写入:
通用处理原则
- 读取网页内容时,解码规则必须和网页实际声明的字符集保持一致
- 写入文件时优先选择支持全语种特殊字符的
UTF-8编码,不要依赖操作系统默认编码
分场景操作方案
代码脚本写入场景(以最常用的Python为例)
绝大多数编码问题出在脚本写文件时未指定编码,Windows系统默认会用GBK编码写入文件,碰到非中英文字符就会转成�。
- 第一步:正确解码网页内容,不要直接用默认解码逻辑
优先从网页响应头、meta标签提取网页声明的编码,通用稳妥的自动识别写法如下:import requests resp = requests.get("目标网页地址") # 自动识别网页实际编码,避免默认解码错误 resp.encoding = resp.apparent_encoding page_content = resp.text - 第二步:写入文件时强制指定UTF-8编码
打开文件时必须显式传入encoding="utf-8"参数,跳过系统默认编码逻辑:
提示:Python2对多语言编码支持较差,建议升级到Python3处理多语言文本,能减少90%以上的编码问题。with open("存储结果.txt", "w", encoding="utf-8") as f: f.write(page_content)
手动复制内容保存场景
如果是手动复制网页内容到本地存为TXT:
- 用系统自带记事本保存时,在保存弹窗底部的「编码」下拉栏,不要选默认的ANSI,手动切换为
UTF-8后再保存 - 优先用VS Code、Notepad++这类对多语言支持更好的文本编辑器,新建文件时默认选择UTF-8编码,不会自动替换特殊字符
常见踩坑排查
- 不要使用
GBK、ASCII这类字符覆盖范围有限的编码存储多语言内容,这类编码本身就不包含ą、ę、ć、ż等特殊字符,必然会出现替换问题 - 如果读取到的网页内容本身就已经显示为�,说明解码环节就用错了编码,需要先修正读取阶段的编码配置,再处理写入逻辑
- 部分老旧东欧语种网页可能使用
iso-8859-2字符集,读取时对应指定该编码解码后,再转成UTF-8格式写入文件即可,不要直接跨编码转存
内容的提问来源于stack exchange,提问作者marcin_bednarski
相关产品推荐
相关产品推荐

