如何将密切好友的微信聊天记录恢复到自己的微信中
本文版权归cxun所有,如有转载请注明出处与本文链接,谢谢!
原文地址:http://www.cnblogs.com/cxun/p/4544000.html
在手机中把与自己联系好几年的好友的聊天记录不小心删除了,痛苦万分,好在对方的手机里还有一份完整的聊天记录,想把对方的聊天记录转移到自己的手机中来,以下是具体的补救方法。
使用软件:SQLite Expert、iTools
适用手机:iPhone
假设A手机是误操作删除记录的手机,B手机是完整数据源手机。
1.备份
首先,先把B手机的数据备份好,建议使用iTools(现在已更新到3.0,本文截图依然是1.0的),找到微信App中的文档文件夹Documents,整个复制到本地硬盘保存起来吧。
2.计算MD5值
首先要弄清楚双方微信ID用户名的MD5值,这个很重要,在后面操作过程中极易弄混淆。在Documents中,会有若干个MD5哈希值为名称的文件夹,如果该手机只登录过一个微信帐号,就会只有一个MD5哈希值的文件夹;如果有多个,你不知道哪个才是你常用微信帐号文件夹的话,告诉你一个办法,哪个文件夹占用空间大,哪个就是你常用的。那么,这个文件夹名称就是A手机微信ID哈希值,以下简称“A_HASH”。
依次打开其内部文件夹,找到聊天记录核心文件:MM.sqlite,很明显,是个sqlite数据库文件。
使用数据库软件打开,这里推荐使用SQLite Expert,个人版是免费的。在左侧树状图中找到好友数据表“Friend”,其中,UsrName字段就是每个好友的微信ID用户名,NickName字段就是好友的昵称,可以通过昵称找到B手机的微信ID用户名,然后使用MD5计算工具算出它的MD5值,以下简称“B_HASH”。
3.复制聊天记录
首先把A手机的数据库文件复制到本地,即“/Documents/A_HASH/DB/MM.sqlite”,使用SQLite Expert打开,在左侧树状图中找到想恢复的好友的数据表“Chat_B_HASH”,这里有两个情况,分开讨论:
(1)如果是刚刚在A手机中误删除的,且没有与B发生过后续通信,该表则不存在,点击SQLite Expert的SQL标签页,输入SQL语句创建该表:
SQL语句如下(记得改为正确的“B_HASH”):
CREATE TABLE [Chat_B_HASH] (TableVer INT4, MesLocalID INTEGER PRIMARY KEY, MesSvrID INTEGER, CreateTime INTEGER, Message TEXT, Status INTEGER, ImgStatus INTEGER, Type INTEGER, Des INTEGER);
按F5,如果没报错的话,则该数据表创建成功。
(2)如果在A手机中误删除之后,与B产生了新的通信,则该数据表已存在,且存有删除后的通信数据。由于一会要把B手机密切好友的所有聊天记录复制到A手机中,此时A手机与B好友的聊天数据已没有意义,为了避免出现数据重复与其它未知的错误出现,建议将A手机中与B好友的数据删除。删除方法是在左侧树状图中点击B好友的数据表“Chat_B_HASH”(千万别点错),在SQL标签页中输入SQL语句并执行:
delete from Chat_B_HASH
同时,还要使用iTools在iPhone中删除与B好友聊天记录相关的语音、图片、视频等文件(不放心的话可以先把这些数据备份出来),在iTools中找到这3个文件夹,在文件列表中按“CTRL + A”全选,按“Del”删除。
/Documents/A_HASH/Audio/B_HASH /Documents/A_HASH/Img/B_HASH /Documents/A_HASH/Video/B_HASH
接下来就是重头戏了,要把B手机中与A聊天的记录复制到A的数据库文件MM.sqlite中。首先找到并使用SQLite Expert打开第1步中B手机的数据库文件“\Documents\B_HASH\DB\MM.sqlite”,在左侧树状图中找到A的微信数据表“Chat_A_HASH”,点击,在右侧选择“Data”标签页,点击表中数据任意记录,按“CTRL + A”全选(数据量很大的话需要等几秒才有反应),再按“CTRL + C”复制,然后在左侧树状图中选择A手机的数据库,找到刚才3.(1)步创建或3.(2)步删除数据的数据表“Chat_B_HASH”,在右侧“Data”标签页下的数据记录位置中点击一下,按“CTRL + V”粘贴(数据量很大的话也要等几秒才有反应),完成数据的复制。为了避免将A和B的数据库弄混淆,复制完后最好把B的数据库关闭。
4.修改收信与发信的标志位
由于在B手机的微信中,看到的聊天记录中A是在左边,B是在右边,A的对话框泡泡是白色,B的是绿色,现在数据直接复制到A的数据库文件中后,需要将两者的发信收信标志位交换,才能在A的手机中正确显示,否则的话会看到原本是A说的话,变成B说的话了。
在SQLite Expert中,点击刚才粘贴的数据表“Chat_B_HASH”,点击右侧的“SQL”标签页,依次输入并执行以下SQL语句:
update Chat_B_HASH set des=2 where des==0
update Chat_B_HASH set des=0 where des==1
update Chat_B_HASH set des=1 where des==2
切记!这3条语句要一条接一条地执行!即:输入第1条,按一次F5,删掉,再输入第2条,再按一次F5,再删掉,然后再输入第3条,按一次F5,完毕!
5.修改视频数据的标志位
这一步若不执行的话,在最后完成后会造成A手机中视频旁边出现感叹号的问题。在SQLite Expert中,点击刚才粘贴的数据表“Chat_B_HASH”,点击右侧的“SQL”标签页,输入并执行以下SQL语句:
update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="3"','status="4"') where type=43 and des=1; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="0"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="1"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="2"','status="3"') where type=43 and des=0; update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'status="4"','status="3"') where type=43 and des=0;
若最后完成后仍发现视频旁边有感叹号出现,请使用终极方法:拿另一台iPhone C,通过WIFI聊天记录迁移的方式迁移到C手机,再迁移回A手机。在迁移过程中会自动修复。
另外,如果B手机的聊天记录是从Android版本的微信迁移过来的,需要执行以下SQL语句,原因是老版的Android微信将视频格式的标志位存储为“44”,需要改成“43”:
update Chat_B_HASH set type=43 where type=44 update Chat_B_HASH set message=replace(cast(message as varchar(80000)) ,'type="44"','type="43"') where type=43
6.复制数据到A手机
进行以上数据库修改操作之后,关闭SQLite Expert(否则复制回iPhone会出错),将修改好的MM.sqlite文件使用iTools导入回A手机微信APP的相应文件夹,即:“/Documents/A_HASH/DB/MM.sqlite”
然后是将B手机中与A聊天的语音、图片、视频导入到A手机微信APP的相应文件夹中,假设在第1步中从B手机备份出来的Documents文件夹存放在D盘,使用iTools将这三个文件夹中的所有文件拖入A手机的微信APP对应的文件夹中:
D:\Documents\B_HASH\Audio\A_HASH ---> iTools:/Documents/A_HASH/Audio/B_HASH (文件后缀是:*.aud 等等) D:\Documents\B_HASH\Img\A_HASH ---> iTools:/Documents/A_HASH/Img/B_HASH (文件后缀是:*.pic 与 *.pic_thum 等等)
D:\Documents\B_HASH\Video\A_HASH ---> iTools:/Documents/A_HASH/Video/B_HASH (文件后缀是:*.mp4 与 *.video_thum 等等)
结语:
在本文的这些操作中,难点就是将A与B弄混淆,因此,在进行此项工作以前,对A与B手机的备份显得尤为重要,一旦弄错,还可以重头再来。