导出聊天
Telegram
在 Telegram Desktop(macOS、Windows、Linux)中:打开聊天 → ⋯ → 导出聊天记录… → 导出。
- 保持照片、视频、语音消息、贴纸和 GIF 的开启:角色会用到它们。
- 两种格式都可以用:HTML(
messages.html)和机器可读的 JSON(result.json)。 - 把导出文件夹,或它的
.zip,拖到页面上。
WhatsApp
在手机上:打开聊天 → ⋮ → 更多 → 导出聊天(iPhone:点击联系人名称 → 导出聊天)→ 包含媒体。把 .zip 发送到你的电脑,然后拖到页面上。
不含媒体导出的聊天是一个 .txt 文件,这种也可以。
大型导出
超过 10 万条消息、数 GB 的导出,操作方式相同:拖入文件夹即可。页面会显示当前进展:
- 正在读取文件夹… 统计文件数(浏览器列出数万个文件可能需要一点时间)。
- 聊天先行。 消息页面(或
result.json,或 WhatsApp 的.txt)会先于媒体上传并读取。如果这个导出已经导入过,导入会在这里结束并打开它,不会上传任何媒体。如果媒体放不进磁盘,会在发送大文件之前告诉你还需要多少空间。 - 正在上传 1.2 GB / 3.4 GB(35%)· 30,905 个文件中的 9,000 个:媒体会分成小批次,逐个上传。浏览器从不会创建一个巨大的请求,中断的批次会单独重试。在你自己的电脑上运行时没有大小限制。
- 正在读取消息:第 37 页 / 共 121 页 · 36,000 条消息:所有页面并行读取一次。
- 正在检查媒体和正在移动媒体:文件会计算哈希以查找重复项,然后移动(而不是复制两次)到数据文件夹中。
- 正在保存,然后打开新建聊天对话框。
同一时间只运行一个导入;错误会保留在拖放区域中可见,你可以重新选择文件夹。
在桌面应用中,不会发生这种上传:应用直接从文件所在的位置读取文件夹、.zip 或 .txt(第 4 至 6 步)。这样更快,也不受下面浏览器问题的影响。
无法上传文件时(浏览器)
浏览器无法再读取的文件(已移动、已更改,或未下载的 iCloud/OneDrive 占位符)会被发现并跳过,那些一直导致其所在批次失败的单个文件也是如此:批次会被拆分,直到该文件被隔离。被跳过的媒体在聊天中显示为缺失;导入之后的消息会指出其中一个,浏览器控制台会列出全部。当聊天文件本身无法发送时,导入会停止并指出该文件。错误信息会显示服务器收到了多少内容,例如 服务器收到 4,096 字节中的 1,200 字节,这样就能轻松区分是连接问题还是浏览器问题。
导入期间,没有任何内容会离开你的电脑,也不会调用任何模型。只有当你在媒体库中点击描述时,媒体才会被描述。
使用 rooftop --import <文件夹> 时,文件夹会就地读取,其中的文件会被复制而不是移动;进度会记录在日志中。对于同一台电脑上的超大导出,这是最快的方式:没有上传,也没有临时文件夹中的第二份副本。
能识别的内容
| 来源 | 文件 |
|---|---|
| Telegram HTML | messages.html、messages2.html、… |
| Telegram JSON | result.json(当文件夹中没有 messages.html 时使用) |
WhatsApp Chat with <名称>.txt(Android)或 _chat.txt(iOS),位于文件夹中、.zip 中或单独存在 |
- Telegram:带换行的文本、链接、引用和代码;回复和部分引用;转发;编辑;服务消息;表情回应;链接预览;照片、视频、圆形视频、语音消息、音频、文件、贴纸(
.webp、.webm、.tgs)、GIF、位置、联系人、投票和通话。 - WhatsApp:Android 和 iOS 格式、12 小时制和 24 小时制时钟,以及两种日/月顺序,按文件检测。多行消息、编辑和附件会被保留。已删除的消息和加密提示会被跳过,
<Media omitted>会被标记为不可用。
媒体文件会计算哈希,因此同一个贴纸发送五次,在媒体库中只算一项(stk_…、gif_…、pho_…)。
HTML 导出中的表情回应
HTML 导出不会说明是谁做出的回应。在一对一聊天中,回应会归于另一位参与者;当数量为 2 时,会同时归于双方。