zoukankan      html  css  js  c++  java
  • 小米手机导出微信聊天记录

    导出手机微信数据库

    首先要做的第一步就是将手机端的微信数据库.db文件导出到电脑上。

    小米手机

    小米的话做法很简单,不需要进行root。

    1. 首先进入手机的设置-更多设置-备份和重置-本地备份,输入密码,点击新建备份,把两个勾去掉,点击软件程序右边的尖括号,选择微信,点击确定,点击开始备份,等待完成就行了。

    2.然后将手机连接电脑,打开手机目录下的MIUI/backup/AllBackup/yyyymmdd_xxxxxx/文件夹,将.bak文件拷贝到电脑上,我这里重命名为了com.tencent.mm.bak

    3.然后用任意一种压缩包软件(我用的是7zip)打开这个com.tencent.mm.bak文件,并且将appscom.tencent.mm MicroMsgsystemInfo.cfgappscom.tencent.mm MicroMsgCompatibleInfo.cfgappscom.tencent.mm MicroMsgxxxxEnMicroMsg.db三个文件解压到电脑上。这里xxxx是一串随机的字母,代表你的微信用户,每个人不一样,一般是最大的那个文件夹,我这里是下图所示文件夹:

    其他手机通用做法

    其他手机可能没有这么方便,一种办法是root之后去/data/data/com.tencent.mm/MicroMsg下面找这三个文件,但是很多人是不会去root的,所以介绍另一种方法。

    首先电脑上安装一款安卓模拟器,然后里面下载手机微信并登录,最重要的一步就是将手机端聊天记录备份到电脑端微信,然后将电脑端聊天记录恢复到安卓虚拟器里的微信,这个功能是微信自带的,应该没有什么难度。

    然后对安卓虚拟器进行root,这个也是设置里就有的,最后就能把三个文件都拷贝到电脑上了。

    破解数据库密码

    4.将上面的所有文件全部放在一个目录下。

    5.然后命令行运行如下代码:

    javac IMEI.java
    java IMEI systemInfo.cfg CompatibleInfo.cfg

    第三行就是数据库的密码了。

    导出聊天记录

    6.然后打开sqlcipher.exe软件,用它打开EnMicroMsg.db数据库,输入第五步得到的密码。

    8.这时候会显示出很多的表格,点击菜单栏的File-Export-Table as CSV file,选择message表,并导出。


    9.如果直接用excel打开这个表格,可能会显示乱码。所以新建一个excel表格,点击数据-来自文本,然后导入这个.csv文件

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

    以上内容转自知乎:https://zhuanlan.zhihu.com/p/77418711

    主要描述的内容:将聊天记录从数据库db文件导出至csv文件

    原文是将:聊天记录用py处理,这里因为需求不同,我需要把聊天内容处理到sqlserver数据库,处理的语言用C#

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------

    一、创建表

    --------------CREATE---------------
    CREATE TABLE MSG(
    ID INT IDENTITY(1,1) PRIMARY KEY,---自增主键
    SENDNAME VARCHAR(200),---发送人姓名
    SENDTIME VARCHAR(200),---发送时间
    SENDCONTENT VARCHAR(MAX)---发送内容
    )
    

    二、创建程序

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.SqlClient;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WCT
    {
        public partial class Form1 : Form
        {
            /// <summary>
            /// 构造方法
            /// </summary>
            public Form1()
            {
                InitializeComponent();
                Control.CheckForIllegalCrossThreadCalls = false;
            }
    
            /// <summary>
            /// CSV文件选择
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog dialog = new OpenFileDialog();
                dialog.Multiselect = false;   //是否允许多选
                dialog.Title = "请选择要处理的文件";  //窗口title
                dialog.Filter = "文本文件(*.db)|*.*";   //可选择的文件类型
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    this.textBox1.Text = dialog.FileName;
                }
            }
    
            /// <summary>
            /// 时间戳转时间
            /// </summary>
            /// <param name="timeStamp"></param>
            /// <returns></returns>
            private DateTime ConvertStringToDateTime(string timeStamp)
            {
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                long lTime = long.Parse(timeStamp + "0000");
                TimeSpan toNow = new TimeSpan(lTime);
                return dtStart.Add(toNow);
            }
    
            /// <summary>
            /// 数据入库
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button4_Click(object sender, EventArgs e)
            {
                string CsvPath = textBox1.Text.Trim();
                this.log.Text = "csv文件载入中,请稍等......";
                CsvStreamReader csv = new CsvStreamReader(CsvPath);
                DataTable dt = csv.csvDT;
                List<message> messages = new List<message>();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    message ms = new message();
                    ms.msgId = dt.Rows[i][""msgId""].ToString();
                    ms.msgSvrId = dt.Rows[i][""msgSvrId""].ToString();
                    ms.type = dt.Rows[i][""type""].ToString();
                    ms.status = dt.Rows[i][""status""].ToString();
                    ms.isSend = dt.Rows[i][""isSend""].ToString();
                    ms.isShowTimer = dt.Rows[i][""isShowTimer""].ToString();
                    ms.createTime = dt.Rows[i][""createTime""].ToString();
                    ms.talker = dt.Rows[i][""talker""].ToString();
                    ms.content = dt.Rows[i][""content""].ToString();
                    ms.imgPath = dt.Rows[i][""imgPath""].ToString();
                    ms.reserved = dt.Rows[i][""reserved""].ToString();
                    ms.lvbuffer = dt.Rows[i][""lvbuffer""].ToString();
                    ms.transContent = dt.Rows[i][""transContent""].ToString();
                    ms.transBrandWording = dt.Rows[i][""transBrandWording""].ToString();
                    ms.talkerId = dt.Rows[i][""talkerId""].ToString();
                    ms.bizClientMsgId = dt.Rows[i][""bizClientMsgId""].ToString();
                    ms.bizChatId = dt.Rows[i][""bizChatId""].ToString();
                    ms.bizChatUserId = dt.Rows[i][""bizChatUserId""].ToString();
                    ms.msgSeq = dt.Rows[i][""msgSeq""].ToString();
                    ms.flag = dt.Rows[i][""flag""].ToString();
                    ms.solitaireFoldInfo = dt.Rows[i][""solitaireFoldInfo""].ToString();
                    ms.historyId = dt.Rows[i][""historyId""].ToString();
                    messages.Add(ms);
                }
                messages = messages.Where(o => o.talker == "这里是会话微信ID" && !o.content.Contains("<msg>")).ToList();
                this.log.Text = "csv文件载入成功,准备数据入库";
                var task = Task.Run(() =>
                {
                    DB db = new DB(" Data Source=127.0.0.1;Initial Catalog=WX;Integrated Security=SSPI; ");
                    db.OpenDB();
                    int total = 0;
                    foreach (var item in messages)
                    {
                        total++;
                        //记录字符串
                        string OneReaderStr = string.Empty;
                        //发送人
                        string senders = string.Empty;
                        if (item.isSend == "1")
                        {
                            senders = "SOULJIE";
                        }
                        if (item.isSend == "0")
                        {
                            senders = "QBB";
                        }
                        ////发送时间
                        string sendtime = ConvertStringToDateTime(item.createTime).ToString("yyyy-MM-dd HH:mm:ss");
                        string content = item.content.Replace("'", """);
                        int a = db.ExecuteNonQuery("INSERT INTO [dbo].[MSG]([SENDNAME],[SENDTIME],[SENDCONTENT]) VALUES ('" + senders + "','" + sendtime + "','" + content + "')", null);
                        if (a >= 1)
                        {
                            this.log.Text = "成功处理第" + total + "条记录!";
                        }
                    }
                    db.Close();
                });
            }
        }
    }
    

     

     至此,数据全部导入SQL数据库供我们使用。

    相关程序、源码下载地址:

    https://gitee.com/soulsjie/WXExportPro

  • 相关阅读:
    win10去除桌面快捷方式小箭头
    java创建线程的几种方式
    Spring知识点总结
    Myeclipse运行报错:an out of memory error has occurred的解决方法
    vue-cli的使用
    3种jQuery弹出大图效果
    Weixin API -- 微信js接口
    setTimeOut传参数
    PHP的八种数据类型
    99%的人都理解错了HTTP中GET与POST的区别
  • 原文地址:https://www.cnblogs.com/soulsjie/p/14357731.html
Copyright © 2011-2022 走看看