BitComet 智能文件命名 — 自动识别下载文件叫什么
为什么 HTTP 下载的文件名经常是乱的
BT 任务没问题——torrent 文件里明确写了每个文件叫什么名字、路径是什么、大小多少。但 HTTP/FTP 下载时,文件名完全取决于服务器怎么返回,而服务器返回的名字经常是:
link.php?id=839274— 典型的动态脚本跳转链接,服务器根本没给真实文件名。download.jsp?file=2023-08-15.zip— 虽然带了文件名但格式乱。file123.exe— 服务器生成的临时随机名,没有语义。getfile.php— 完全没有名字信息。- 还有中文服务器用 GBK 编码返回文件名、浏览器和 BitComet 默认按 UTF-8 解码,最后得到一堆乱码。
没有智能命名,下载下来的文件要么没扩展名打不开、要么名字一堆乱码看着就难受。
BitComet 的智能命名策略
BitComet 在 HTTP/FTP 下载完成(甚至在下载过程中)会依次尝试以下策略来确定文件的正确名字:
策略一:服务器响应头
HTTP 响应头里可能有一个 Content-Disposition 字段,里面包含了原始文件名:
Content-Disposition: attachment; filename="Ubuntu-22.04.3-desktop-amd64.iso"
这是最准确的来源——直接用服务器声明的文件名。BitComet 还会识别 RFC 2231 编码的文件名(filename*=UTF-8''Ubuntu%2022.04%20LTS.iso 这种 URL 编码格式),自动解码还原成中文或其他非 ASCII 语言。
策略二:URL 路径提取
如果服务器没返回 Content-Disposition,BitComet 从 URL 里提取最后一个有意义的路径段:
https://releases.ubuntu.com/22.04/Ubuntu-22.04.3-desktop-amd64.iso?from=home
↑ 提取这个
如果 URL 里根本没有扩展名(比如动态脚本链接 https://example.com/download.php?id=12345),BitComet 会跳过这个策略。
策略三:文件内容检测(Magic Number)
下载开始后 BitComet 会先下载文件头部的几个字节(1KB 左右),检查它的 Magic Number(魔数)来判断文件真实类型:
PK\x03\x04→ ZIP 文件(.zip)MZ→ Windows 可执行文件(.exe)7z\xBC\xAF\x27\x1C→ 7-Zip 文件(.7z)ID3→ MP3 文件ftyp→ MP4 视频Rar!→ RAR 压缩包
然后根据检测结果给文件补上正确的扩展名。比如服务器没返回扩展名、URL 里也没有,但 Magic Number 显示这是个 ZIP,BitComet 就把它命名为 download.zip 或 file123.zip(取决于有没有其他线索)。
策略四:MP3 ID3 标签读取
如果 Magic Number 检测到文件是 MP3,BitComet 会进一步读取文件头的 ID3 标签信息——里面通常包含歌曲名、艺术家、专辑名。然后自动按"艺术家 - 歌曲名.mp3"的格式重命名:
download.php → Billie Eilish - Bad Guy.mp3
策略五:手动覆盖
如果 BitComet 的自动命名结果还是不符合你的预期,可以:
- 新建任务时手动输入:在 HTTP/FTP 任务属性的"文件重命名"一栏里手动填你想要的名字。
- 下载过程中改名:右键任务 → "重命名文件",随时修改。
- 下载完成后改名:直接在 Windows 资源管理器里改,BitComet 不干涉——它只记录文件最初下载时的路径,改名后不会自动跟着更新,需要手动重新关联(右键任务 → "移动/重命名文件")。
HTTP/FTP 任务命名 vs BT 任务命名
BT 任务的文件名完全由 torrent 文件里的元数据决定,没有"命名策略"一说——torrent 里写什么名字就是什么名字。但 BT 任务里可以选择性下载(跳过某些文件、勾选某些文件),这些功能 HTTP/FTP 任务不具备。
| BT 任务 | HTTP/FTP 任务 | |
|---|---|---|
| 文件名来源 | torrent 元数据 | 服务器返回 + 自动识别 |
| 是否需要智能命名 | 不需要(torrent 里已声明) | 需要(服务器可能不给) |
| 能否选择性下载 | 能 | 不能 |
| 多文件 vs 单文件 | 可以多文件 | 通常单文件(批量下载除外) |
常见命名问题
中文文件名变成乱码
原因:服务器用 GBK/GB2312 编码返回中文文件名,但 BitComet 按 UTF-8 解码了。
解决:在 选项 → HTTP/FTP → "文件名编码检测" 里尝试不同的编码选项。或者在"高级设置"里手动指定默认编码为 GBK,然后观察效果。
服务器返回的文件名就是英文/拼音,想改成中文
BitComet 的自动命名做不到——它只能"恢复"服务器本来就能提供的信息,不会翻译。这种情况手动改名。
下载完成后又被改回了原名
可能是 BitComet 的 P2P 加速通道在同步文件名信息。关闭 HTTP P2P 加速、或者手动改名后不要再让 BitComet 参与 P2P 加速上传。
下载到一半时文件名还没确定
这是正常的——BitComet 需要先下载足够的文件头来做 Magic Number 检测。检测完成后会自动修正文件名。如果你等不及,可以在任务属性里手动指定。