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

Python处理含多种编码的网页文件时写入失败如何解决?

混合编码网页文件读写修改解决方案

问题根因

你遇到的报错核心是单一编码规则无法兼容网页中同时存在的UTF-8明文、URL编码(你提到的%开头的内容属于URL编码,不是Unicode escape)两类内容,固定单一编码读写时会出现解码/编码失败的问题,另外原代码中逐行循环反复打开关闭写入文件,也容易触发IO冲突导致写入失败。

最优解决方案

优先选择二进制读写方案,完全跳过编码解码步骤,直接对字节内容做替换,100%兼容原文件的所有编码格式,不会出现乱码或写入失败问题。

方案1:二进制读写(保留原文件所有编码格式,推荐)

write_name = 'advisor_appendices111.htm'
file_name = 'advisor_appendices.htm'
# 待替换的目标字符串转成字节串,和读取的二进制内容格式匹配
target_bytes = '../../%E6%96%B0%E5%BB%BA%E6%96%87%E4%BB%B6%E5%A4%B9/documentation/'.encode('utf-8')

with open(file_name, "rb") as f:
    content = f.read()
    # 跳过第一行的处理
    first_line_end = content.find(b'\n') + 1
    content = content[first_line_end:]
    # 字节串替换
    content = content.replace(target_bytes, b'')

# 直接写入二进制内容,完全保留原编码
with open(write_name, "wb") as fpw:
    fpw.write(content)

方案2:统一转码为UTF-8(适合需要统一编码格式的场景)

如果需要把所有内容转成统一的UTF-8编码,可以先对内容做URL解码后再处理:

from urllib.parse import unquote

write_name = 'advisor_appendices111.htm'
file_name = 'advisor_appendices.htm'

with open(file_name, "rb") as f:
    raw_content = f.read()
    # 解码为字符串,忽略无法解码的异常字符
    str_content = raw_content.decode('utf-8', errors='ignore')
    # 解URL编码,将%XX格式内容转为正常明文
    str_content = unquote(str_content)
    # 跳过第一行
    str_content = '\n'.join(str_content.splitlines()[1:])
    # 替换明文路径
    str_content = str_content.replace('../../新建文件夹/documentation/', '')

# 统一用UTF-8编码写入
with open(write_name, "w", encoding="utf-8") as fpw:
    fpw.write(str_content)

注意事项

  • 读写文件优先使用with语法,会自动处理文件关闭,避免IO资源泄漏
  • 不需要逐行读写,一次性读取全量内容处理效率更高,也不会出现行截断导致的替换失效问题

内容的提问来源于stack exchange,提问作者米肖雄

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:04