清理电脑发现了以前 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
P.s 文章看得有点吃力, 245 页的动态 length 解析的那 4 个步骤啥意思? 一直无法复现…… 求教
1
cjd6568358 2020-11-20 18:06:33 +08:00
ascii 都是单字节字母 可以先把 buffer 都用 ascii 解一遍看看出来了啥 剩下的乱码再用 utf16 试试
|
2
cjd6568358 2020-11-20 18:08:31 +08:00
另外短信不是一般都是 Unicode 编码么 怎么还能混着编?
|
3
Bromine0x23 2020-11-20 18:33:19 +08:00
length = length0 % 2 == 0 ? length0 / 2 : length0 / 4 + length1 * 64
应该是这样 |
4
Bromine0x23 2020-11-20 18:39:16 +08:00
0xe0,0x20 可能是某种编码变更提示
|
5
venster 2020-11-20 18:46:02 +08:00 via iPhone
我记得黑莓那会需要改编码为 ucs2 才能显示汉字。或许有帮助。
|
6
lululau 2020-11-20 20:58:19 +08:00 via iPhone
不可能
|
7
lululau 2020-11-20 20:58:35 +08:00 via iPhone
这是个逻辑问题,不是技术问题
|
8
lxilu 2020-11-21 14:36:31 +08:00
我确认 E020 为标记,E000-F8FF 是 Private Use Area
|
9
lxilu 2020-11-21 14:53:18 +08:00
有短信中心号码(收信号所在地)和发信号,注意一下
|
10
lqzhgood OP @cjd6568358 估计为了节省空间吧,因为 ascii 的 Unicode 高位都是 0,估计为了空间裁掉了。
事实上确实短信可以发英文 140 字。那么英文肯定不是 Unicode 编码的,应该是单字节 ascii 。 中文至少双字节,那么可以肯定是混编无疑。 |