本文版權歸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手機的備份顯得尤為重要,一旦弄錯,還可以重頭再來。