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 ···
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 |
3
ysc3839 2018-03-06 22:13:01 +08:00 1
@kokutou 搜索 0xC2 和 0xC3,如果后一个字节 >= 0x90 就 += 0x40,然后删掉所有 0xC2 0xC3。
|
5
wclebb 2018-03-06 22:15:43 +08:00 via iPhone
是不是电信?
|
6
kokutou OP |
10
wclebb 2018-03-06 22:47:12 +08:00
@kokutou #7 之前用过电信 Android 手机。
也和你一样收到过乱码。 在信息的设置里找找(很久了,不记得是什么),有个编码的,选好了它就能读取了。 你完全用不着这样的。 是的,就这么简单。 或者搜一下 电信 短信 乱码 我相信,一定会有你这个解决方案。 |
11
zouxy 2018-03-07 00:13:01 +08:00 via iPhone
我没仔细解码,估计是短信内容超过 140 字节需要两条短信拼接 然后拼接错了.
长短信 每条短信前面有字节标示共几条 当前是第几条 手机底层软件或者运营商短信网关一个出错就会出错.手机出错的可能性大些. 因为短信解码是底层功能,出错了之后保存到数据库就是错的,换短信应用的结果会一样的 |
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)) |