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

为何HTML页面保存后文件大小总是比下载时多6字节?

问题原因分析及解决办法

核心问题:混淆了字符数和字节数

你踩了一个很容易忽略的坑:len(response.text)统计的是解码后Unicode字符串的字符数量,并非服务器返回的原始字节数。而Path(filepath).stat().st_size是文件的实际字节数,对应的是服务器返回的原始字节流大小(也就是len(response.content)的结果)。

如果你的测试页面里恰好有3个UTF-8编码的多字节字符(比如中文、特殊符号等,每个占3字节),那len(response.text)会比实际字节数少6(3*(3-1)=6),这就导致你看到固定差6字节的现象——10个页面都出现这个情况,说明这些页面的多字节字符数量刚好一致。

为什么curl下载也有同样问题?

如果是在Windows系统下用curl URL > file.html下载,命令行的重定向会自动把服务器返回的LF(\n)换行符转换成Windows的CRLF(\r\n),每个换行多1字节。要是页面正好有6个LF,文件大小就会比原始响应多6字节。不过结合你Python测试的情况,更可能还是字符数/字节数混淆的问题。

正确的做法

  1. 用response.content获取原始字节数:
    对比文件大小的时候,应该用len(response.content),而不是len(response.text),这才是服务器返回的真实字节数。
  2. 二进制模式保存文件:
    要保证保存的文件和原始响应完全一致,用二进制模式写入response.content,避免编码和换行符转换:
    from pathlib import Path
    import requests
    
    URL = "你的目标URL"
    filepath = "保存的文件路径"
    
    response = requests.get(URL)
    response.raise_for_status()  # 确保请求成功
    
    # 检查是否需要保存
    if not Path(filepath).exists() or Path(filepath).stat().st_size != len(response.content):
        with open(filepath, 'wb') as f:
            f.write(response.content)
    

内容的提问来源于stack exchange,提问作者snailontheslope

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:46:28