奇怪的unicode崩溃

时间:2015-12-01 05:40:33

标签: ruby debugging unicode sms

我的一个Rails应用程序收到了来自ATT号码的四条短信,每封邮件都以此开头(顺序):

\u0005\u0000\u0003?\u0004\u0001 Message 1...

\u0005\u0000\u0003?\u0004\u0002 Message 2...

\u0005\u0000\u0003?\u0004\u0003 Message 3...

\u0005\u0000\u0003?\u0004\u0004 Message 4...

应用程序每次都崩溃并出现错误"字符串包含空字节"。

它们似乎不像我认识的任何unicode那样解码。有人见过这个吗?

1 个答案:

答案 0 :(得分:2)

快速谷歌搜索(对于“短信标题”,也许是一个幸运的猜测)显示这是一个短信用户数据标题(UDH);特别是描述“连锁SMS”(CSMS)的那个,即已被分成多个消息的长消息。维基百科有一个很好的概述:https://en.wikipedia.org/wiki/Concatenated_SMS那里描述的八位字节完全匹配你所看到的:

  1. 05:用户数据标头的长度,在本例中为5。
  2. 00:信息元素标识符; 00是Concatenated SMS的标识符。
  3. 03:不包括前两个字段的标题长度(我认为这样可以一个接一个地使用多个标题,在这种情况下,第一个八位字节将是所有标题的总长度)。
  4. 3F:CSMS标识符,即所有消息部分共享的ID。 (Ruby将其显示为?,因为0 + 003F恰好是问号的UTF-8代码点。)
  5. 04:部件总数。
  6. 00-FF:此部分的序列号。
  7. 我建议阅读维基百科的文章;这很容易理解,我确信我已经过度简化了一些事情。

    利用此标题将CSMS部分重新加入一起将是一个有趣的问题。令我感到惊讶的是,无论您使用哪种API,都不会为您做到这一点。