我的一个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那样解码。有人见过这个吗?
答案 0 :(得分:2)
快速谷歌搜索(对于“短信标题”,也许是一个幸运的猜测)显示这是一个短信用户数据标题(UDH);特别是描述“连锁SMS”(CSMS)的那个,即已被分成多个消息的长消息。维基百科有一个很好的概述:https://en.wikipedia.org/wiki/Concatenated_SMS那里描述的八位字节完全匹配你所看到的:
05
:用户数据标头的长度,在本例中为5。00
:信息元素标识符; 00
是Concatenated SMS的标识符。03
:不包括前两个字段的标题长度(我认为这样可以一个接一个地使用多个标题,在这种情况下,第一个八位字节将是所有标题的总长度)。 3F
:CSMS标识符,即所有消息部分共享的ID。 (Ruby将其显示为?
,因为0 + 003F恰好是问号的UTF-8代码点。)04
:部件总数。00-FF
:此部分的序列号。我建议阅读维基百科的文章;这很容易理解,我确信我已经过度简化了一些事情。
利用此标题将CSMS部分重新加入一起将是一个有趣的问题。令我感到惊讶的是,无论您使用哪种API,都不会为您做到这一点。