Support [ and ] characters in PDU mode
我正在Nodejs中编写应用程序,用于在PDU模式下发送和接收短信息。我使用WaveCom GSM调制解调器(7位编码)发送短信息。它还支持8位(at+csmp=1167,0,8)编码方案。
我可以正确地发送字母数字字符,但不能发送像([,],等)这样的字符。
这里的字符串:
1 2 | AT+CMGS=14 0001030C911989890878800004015B |
文本字符串:
但我收到一些垃圾角色。有什么想法吗?
以及如何发送多部分短信。我已经提到了这个,但是我没有得到想要的输出。有人能推荐8位(7位编码方案)文本编码方案吗?请帮帮我…
根据此页面(参见发送Unicode短信部分),8位编码实际上是UCS-2。
我对nodejs不太了解,无法为您提供完整的实现,但这里有一个.NET示例:
1 2 3 4 5 6 7 8 9 10 | string EncodeSmsText(string text) { // Convert input string to a sequence of bytes in BigEndian UCS-2 encoding // 'Hi' -> [0, 72, 0, 105] var bytes = Encoding.BigEndianUnicode.GetBytes(text); // Encode bytes to hex representation // [0, 72, 0, 105] -> '00480069' return BitConverter.ToString(bytes).Replace("-",""); } |
请注意,根据本文,我的代码不适用于编码为代理项对的字符,因为
编辑
以下是在缓冲区类中使用内置ucs2转换器的nodejs版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function swapBytes(buffer) { var l = buffer.length; if (l & 0x01) { throw new Error('Buffer length must be even'); } for (var i = 0; i < l; i += 2) { var a = buffer[i]; buffer[i] = buffer[i+1]; buffer[i+1] = a; } return buffer; } function encodeSmsText(input) { var ucs2le = new Buffer(input, 'ucs2'); var ucs2be = swapBytes(ucs2le); return ucs2be.toString('hex'); } console.log(encodeSmsText('Hi')); |
受到这些答案的启发:
- 节点.js big endian ucs-2
- 如何在node.js中进行base64编码?
谢谢,
最后我得到了答案:)
此字符([,],)编码为以下两个字符:
所以每当我喜欢这样的字符,我就用相应的值替换它,然后使用7位编码。工作很好…
所以我的编码字符串是
1 2 | > AT+CMGS=15 > 0001000C911989890878800000021B1E |
对于"[你好]"
1 2 | > AT+CMGS=21 > 0001000C911989890878800000091B1EBACC66BF373E |
再次感谢……