V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lqzhgood
V2EX  ›  程序员

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

  •  
  •   lqzhgood · Nov 20, 2020 · 2036 views
    This topic created in 1984 days ago, the information mentioned may be changed or developed.

    清理电脑发现了以前 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 个步骤啥意思? 一直无法复现…… 求教

    10 replies    2020-11-21 17:35:44 +08:00
    cjd6568358
        1
    cjd6568358  
       Nov 20, 2020
    ascii 都是单字节字母 可以先把 buffer 都用 ascii 解一遍看看出来了啥 剩下的乱码再用 utf16 试试
    cjd6568358
        2
    cjd6568358  
       Nov 20, 2020
    另外短信不是一般都是 Unicode 编码么 怎么还能混着编?
    Bromine0x23
        3
    Bromine0x23  
       Nov 20, 2020
    length = length0 % 2 == 0 ? length0 / 2 : length0 / 4 + length1 * 64
    应该是这样
    Bromine0x23
        4
    Bromine0x23  
       Nov 20, 2020
    0xe0,0x20 可能是某种编码变更提示
    venster
        5
    venster  
       Nov 20, 2020 via iPhone
    我记得黑莓那会需要改编码为 ucs2 才能显示汉字。或许有帮助。
    lululau
        6
    lululau  
       Nov 20, 2020 via iPhone
    不可能
    lululau
        7
    lululau  
       Nov 20, 2020 via iPhone
    这是个逻辑问题,不是技术问题
    lxilu
        8
    lxilu  
       Nov 21, 2020
    我确认 E020 为标记,E000-F8FF 是 Private Use Area
    lxilu
        9
    lxilu  
       Nov 21, 2020
    有短信中心号码(收信号所在地)和发信号,注意一下
    lqzhgood
        10
    lqzhgood  
    OP
       Nov 21, 2020
    @cjd6568358 估计为了节省空间吧,因为 ascii 的 Unicode 高位都是 0,估计为了空间裁掉了。
    事实上确实短信可以发英文 140 字。那么英文肯定不是 Unicode 编码的,应该是单字节 ascii 。
    中文至少双字节,那么可以肯定是混编无疑。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5727 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 06:44 · PVG 14:44 · LAX 23:44 · JFK 02:44
    ♥ Do have faith in what you're doing.