短信里面的 中(utf16-be) 英(ASCII) 混合 Buffer 如何解码?

2020-11-20 17:33:34 +08:00
 lqzhgood

清理电脑发现了以前 Symbian S60v3 的短信备份,想解析出来看看。

第一步解析短信内容就遇到问题了。

https://www.zhihu.com/question/264240744/answer/279128285

由于短信内 中文 编码是 utf16-be(两位),英文编码是 ASCII(一位) 。那么我应该如何解析中英文混合的内容呢~ 并没有标志位告诉我当前字符是 中文 还是 英文 ,所以我应该如何判断采用哪种编码来解析呢?

const 我是用例 = [0x62, 0x11, 0x67, 0x0, 0x4e, 0xb2, 0x72, 0x31, 0x76, 0x84, 0x67, 0xb, 0x53, 0xcb, 0x4e, 0xec, 0xe0, 0x20, 0x3a, 0x29, 0x20, 0x20, 0x4d, 0x65, 0x72, 0x72, 0x79,
    0x20, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x6d, 0x61, 0x73, 0x7e, 0x7e, 0x7e, 0x7e, 0x21, 0x21, 0x21]
// 上面的短信内容 #大致# 是  [我最亲爱的朋友们 **** :)  Merry Christmas~~~~!!!]    *** 为未知字符

参考文章

S60v3 短信解析

https://books.google.com/books?id=7PO5BQAAQBAJ&pg=PA245&lpg=PA245&dq=1000484B%5CMail2+encoded&source=bl&ots=tZTcJej9Gt&sig=ACfU3U2XuBvQcfCncxEFynrPWfKP3A3ozw&hl=zh-CN&sa=X&ved=2ahUKEwiR7ZzHiZDtAhURc3AKHVT5AIkQ6AEwCXoECAEQAg#v=onepage&q=1000484B%5CMail2%20encoded&f=false

源文件 Buffer

https://note.ms/s60sms

P.s 文章看得有点吃力, 245 页的动态 length 解析的那 4 个步骤啥意思? 一直无法复现…… 求教

1419 次点击
所在节点    程序员
10 条回复
cjd6568358
2020-11-20 18:06:33 +08:00
ascii 都是单字节字母 可以先把 buffer 都用 ascii 解一遍看看出来了啥 剩下的乱码再用 utf16 试试
cjd6568358
2020-11-20 18:08:31 +08:00
另外短信不是一般都是 Unicode 编码么 怎么还能混着编?
Bromine0x23
2020-11-20 18:33:19 +08:00
length = length0 % 2 == 0 ? length0 / 2 : length0 / 4 + length1 * 64
应该是这样
Bromine0x23
2020-11-20 18:39:16 +08:00
0xe0,0x20 可能是某种编码变更提示
venster
2020-11-20 18:46:02 +08:00
我记得黑莓那会需要改编码为 ucs2 才能显示汉字。或许有帮助。
lululau
2020-11-20 20:58:19 +08:00
不可能
lululau
2020-11-20 20:58:35 +08:00
这是个逻辑问题,不是技术问题
lxilu
2020-11-21 14:36:31 +08:00
我确认 E020 为标记,E000-F8FF 是 Private Use Area
lxilu
2020-11-21 14:53:18 +08:00
有短信中心号码(收信号所在地)和发信号,注意一下
lqzhgood
2020-11-21 17:35:44 +08:00
@cjd6568358 估计为了节省空间吧,因为 ascii 的 Unicode 高位都是 0,估计为了空间裁掉了。
事实上确实短信可以发英文 140 字。那么英文肯定不是 Unicode 编码的,应该是单字节 ascii 。
中文至少双字节,那么可以肯定是混编无疑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX