V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kokutou
V2EX  ›  问与答

个别收到的短信乱码,有什么办法还原么。。。

  •  
  •   kokutou · 2018-03-06 18:58:45 +08:00 · 8339 次点击
    这是一个创建于 2214 天前的主题,其中的信息可能已经有所发展或是发生改变。

    andorid 7.1 和 android 8.1 都这个样。系统是 lineageos

    就很个别的几条短信。现在手机里 1200 多条,也就 9 条是这样的乱码。

    其中 6 条都是湖北银行的验证码 1069019596599 发的。。。

    换了几个短信程序,也显示的是乱码

    通过拷贝 mmssms.db ,读出来二进制数据,

    用 winhex 切换到 UTF-16 BE 能看到部分中文,但间断的还是乱码。

    是中间还需要什么骚操作么。

    mmssms.db 里:

    mmssms.db 导出二进制放到 winhex 显示:

    手机上显示基本就是右边 ASCII 去掉空格的样子。

    转换成 UTF-16 BE 能有部分中文。

    我想知道有什么办法完全还原这几条短信么。。。

    附上一堆 hex

    ··· 30106D6653C391C294C3B6C2884C3011606D55C29C60C2A85DC3B262104E3A6D6653C3910056004900530041767DC291C3914FC3A1752853614F18C29009752862373002514D5E74C28D39002C5BC2A162795FC3AB002C6DC288C28D39C290017EC2A25305002C70C2B951C3BB00200074002E0063006E002F00520058005800780049005600640020586BC288687533C298C2860020002EC29000C28BC2A256C39E0054 ···

    12 条回复    2018-03-07 09:31:00 +08:00
    ysc3839
        1
    ysc3839  
       2018-03-06 22:06:03 +08:00   ❤️ 2
    修改后的 Hex
    30 10 6D 66 53 D1 94 F6 88 4C 30 11 60 6D 55 9C 60 A8 5D F2 62 10 4E 3A 6D A6 53 D1 00 56 00 49 00 53 00 41 76 7D 91 D1 4F E1 75 28 53 61 4F 18 90 09 75 28 62 37 30 02 51 4D 5E 74 8D 39 00 2C 5B A1 62 79 5F EB 00 2C 6D 88 8D 39 90 01 7E A2 53 05 00 2C 70 B9 51 FB 00 20 00 74 00 2E 00 63 00 6E 00 2F 00 52 00 58 00 58 00 78 00 49 00 56 00 64 00 20 58 6B 88 68 75 33 98 86 00 20 00 2E 90 00 8B A2 56 DE 00 54
    kokutou
        2
    kokutou  
    OP
       2018-03-06 22:10:54 +08:00
    @ysc3839 #1
    咋处理。。。
    能简单说下方法么。。。
    ysc3839
        3
    ysc3839  
       2018-03-06 22:13:01 +08:00   ❤️ 1
    @kokutou 搜索 0xC2 和 0xC3,如果后一个字节 >= 0x90 就 += 0x40,然后删掉所有 0xC2 0xC3。
    ysc3839
        4
    ysc3839  
       2018-03-06 22:13:57 +08:00   ❤️ 1
    @ysc3839 错了,不是 >= 0x90,是 > 0x90。
    wclebb
        5
    wclebb  
       2018-03-06 22:15:43 +08:00 via iPhone
    是不是电信?
    kokutou
        6
    kokutou  
    OP
       2018-03-06 22:15:52 +08:00
    @ysc3839 #3
    感谢大佬。。。

    这是 lineageos 的问题还是 android 的问题还是说是湖北银行 /浦发银行的问题?
    kokutou
        7
    kokutou  
    OP
       2018-03-06 22:16:05 +08:00
    @wclebb #5 对,电信。
    难道是电信的问题。。。
    ysc3839
        8
    ysc3839  
       2018-03-06 22:25:02 +08:00   ❤️ 1
    @kokutou 不知道,这个方法也是猜出来的。
    kokutou
        9
    kokutou  
    OP
       2018-03-06 22:45:55 +08:00
    @ysc3839 #8
    感谢大佬

    全部还原了,然而并没有什么重要的信息。。。😂
    wclebb
        10
    wclebb  
       2018-03-06 22:47:12 +08:00
    @kokutou #7 之前用过电信 Android 手机。
    也和你一样收到过乱码。

    在信息的设置里找找(很久了,不记得是什么),有个编码的,选好了它就能读取了。

    你完全用不着这样的。
    是的,就这么简单。

    或者搜一下
    电信 短信 乱码

    我相信,一定会有你这个解决方案。
    zouxy
        11
    zouxy  
       2018-03-07 00:13:01 +08:00 via iPhone
    我没仔细解码,估计是短信内容超过 140 字节需要两条短信拼接 然后拼接错了.

    长短信 每条短信前面有字节标示共几条 当前是第几条

    手机底层软件或者运营商短信网关一个出错就会出错.手机出错的可能性大些.

    因为短信解码是底层功能,出错了之后保存到数据库就是错的,换短信应用的结果会一样的
    cy97cool
        12
    cy97cool  
       2018-03-07 09:31:00 +08:00
    对短信内容感兴趣的可以 py:

    d="30 10 6D 66 53 D1 94 F6 88 4C 30 11 60 6D 55 9C 60 A8 5D F2 62 10 4E 3A 6D A6 53 D1 00 56 00 49 00 53 00 41 76 7D 91 D1 4F E1 75 28 53 61 4F 18 90 09 75 28 62 37 30 02 51 4D 5E 74 8D 39 00 2C 5B A1 62 79 5F EB 00 2C 6D 88 8D 39 90 01 7E A2 53 05 00 2C 70 B9 51 FB 00 20 00 74 00 2E 00 63 00 6E 00 2F 00 52 00 58 00 58 00 78 00 49 00 56 00 64 00 20 58 6B 88 68 75 33 98 86 00 20 00 2E 90 00 8B A2 56 DE 00 54".split()
    x=[int("0x"+i,16) for i in d]
    result=[]
    for i in range(0,len(x),2):
       result += bytes([ x[i+1], x[i] ]).decode("utf-16")
    print("".join(result))
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1585 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 16:56 · PVG 00:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.