ZhangJun2017 / QQChatHistoryExporter

导出手机QQ聊天记录为网页
MIT License
35 stars 4 forks source link

系统表情不正确 #6

Open lqzhgood opened 2 years ago

lqzhgood commented 2 years ago

如图

HEX 字符串

141714281413142b141514091414146a142314c3ba141914181401140014211420140c141b140d141614031412141e141f14511452141a140214251432142a14531422140b143114541427144e140514041406145514561457142e1458142c14591430140e145a142914c4b11424143314c2a414c2ae14c2ab14c2a514c2a614c2a114c2a714c2aa14c2a914c2ac14c2ad14c2a814c2af14c39914c39a14c39b14c48414c48514c48614c48714c48814c48914c48a14c48b14c48c14c48d14c48e14c48f14c49014c49514c4b314c4b214c49914c49a14c49b14c49c14c49d14c4a514c49e14c49f14c4a014c4a114c4a614c4a714c4a814c4a914c4aa14c4ab14c4ac14c4ad14c4af14c4ae14c4b014c2b8146d146e146c14c49114c4921411143c143d145c145d14c2a31442143a140714081439141d141c144a143b1450141014461475144d143e140f1444144b144c142d14341435143614371438143f144914481441145e14401426142f145f144714601461146214631464144f1465146614671468146914701474147614771478147b14c28214c28c14c28d14c2b414c2b014c2b114c2b614c2b314c2b914c28f14c29214c29314c29414c29514c29614c29714c29814c29914c29a14c29b14c29c14c29d14c29f14c2a014c4a214c4a314c4a414c49614c49714c49814c39614c39714c39814c2bb14c39114c38614c2ba14c2bd14c39414c2bc14c2be14c38914c39214c2bf14c38514c38b14c38d14c38114c38214c39314c38c14c38014c38f14c39514c38a14c38414c39014c38814c38e14c38314c387

image

image

lqzhgood commented 2 years ago

貌似在源码的这个类 EmotcationConstants.java 里面 https://github.com/tsuzcx/qq_apk/blob/main/com.tencent.mobileqq/classes.jar/com/tencent/mobileqq/text/EmotcationConstants.java

ZhangJun2017 commented 2 years ago

感谢,自己用的手机QQ版本是8.8.5,也存在部分表情缺失和不正确,不过目前暂时没有时间做补全和更正

lqzhgood commented 2 years ago

表情并不是只有两位,貌似在某种情况下会有3位,第二位有可能是 C2 C3 C4 .... ,感觉是 Group 组的概念, 如上述 Hex 字符串 前十个表情

  ["14", "17"],
  ["14", "28"],
  ["14", "13"],
  ["14", "2b"],
  ["14", "15"],
  ["14", "9"],
  ["14", "14"],
  ["14", "6a"],
  ["14", "23"],
  ["14", "c3", "ba"],
  ["14", "19"],
  ["14", "18"],

还有一些表情是内置藏起来了,没有显示在发送表情面板里面的,如常见的 \吓 s84

感觉还是需要从源码角度才能拿到全部表情的 Gif、 描述、定位符 的关系

ZhangJun2017 commented 2 years ago

可以在 /data/data/com.tencent.mobileqq/files/qq_emoticon_res/face_config.json 取到配置文件,另外观察发现隐藏的表情存在 QHide 字段。 image

lqzhgood commented 2 years ago

将 apk 改 zip 解压后也能得到 .\assets\face_config.json (F1) 这个与上述 /data/data/ (F2) 中的不一致 F1 应该是废弃的,里面还有错误, 如 ❔ F1 /问好 F2 /问号

QQ F2 和 Tim F2 还不一致~ 还是不知道 magicString (\u0014\uxxxx) 如何对应到文件

{
        "flag": "0x14",
        "group": "none",
        "index": "0x17",
        "index10": 23,
        "des": "微笑",
        "packName": "QQ经典",
        "magicStr": "\u0014\u0017"
    },
    {
        "flag": "0x14",
        "group": "none",
        "index": "0x28",
        "index10": 40,
        "des": "撇嘴",
        "packName": "QQ经典",
        "magicStr": "\u0014("
    },
    {
        "flag": "0x14",
        "group": "none",
        "index": "0x13",
        "index10": 19,
        "des": "色",
        "packName": "QQ经典",
        "magicStr": "\u0014\u0013"
    },
    {
        "flag": "0x14",
        "group": "none",
        "index": "0x2b",
        "index10": 43,
        "des": "发呆",
        "packName": "QQ经典",
        "magicStr": "\u0014+"
    },
    {
        "flag": "0x14",
        "group": "none",
        "index": "0x15",
        "index10": 21,
        "des": "得意",
        "packName": "QQ经典",
        "magicStr": "\u0014\u0015"
    },
ZhangJun2017 commented 2 years ago

index10的值,也即magicStr第二位当成char转int的值,与AQLid对应后,用QSid拼接成s{QSid}.png即可。Tim没有这个字段,不知道是不是有另外的储存方式?  

    {
      "QSid": "14",
      "QDes": "/微笑",
      "IQLid": "23",
      "AQLid": "23",
      "EMCode": "100"
    },
    {
      "QSid": "1",
      "QDes": "/撇嘴",
      "IQLid": "40",
      "AQLid": "40",
      "EMCode": "101"
    },
    {
      "QSid": "2",
      "QDes": "/色",
      "IQLid": "19",
      "AQLid": "19",
      "EMCode": "102"
    },
    {
      "QSid": "3",
      "QDes": "/发呆",
      "IQLid": "43",
      "AQLid": "43",
      "EMCode": "103"
    },
    {
      "QSid": "4",
      "QDes": "/得意",
      "IQLid": "21",
      "AQLid": "21",
      "EMCode": "104"
    }