在PDU模式下支持字符

我正在写应用程序在nodejs发送和接收短信在PDU模式。我使用波通GSM调制解调器(7位编码)发送短信。 它也支持8位(AT + CSMP = 1,167,0,8)编码scheme。

我可以正确地发送字母数字字符,但是我不能发送像([,],|等)的字符。

这里string:

AT+CMGS=14 0001030C911989890878800004015B 

文本string: [

但我收到一些垃圾字符。 任何想法?

以及如何发送多部分短信。 我已经提到这个 ,而这个,但我没有得到所需的输出。 任何人都可以build议8位( 7位编码scheme )文本编码scheme? 请帮帮我…

根据这个页面 (见发送一个Unicode SMS消息),8位编码实际上是UCS-2。

我不太了解nodejs给你完整的实现,但这里是一个.NET示例:

 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("-", ""); } 

请注意,根据这篇文章,我的代码将不能用于编码为代理对的字符,因为Encoding.BigEndianEncoding是UTF-16(不是UCS-2)。

编辑

这里是在Buffer类中使用内置的UCS2转换器的NodeJS版本:

 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')); 

受到这些答案的启发:

  • Node.JS Big-Endian UCS-2
  • 如何在node.js中执行Base64编码?

谢谢,

最后我得到了答案:)

这个字符([,],|)被编码为两个字符

[编码为1B1E (转义字符和<符号的组合)

]编码为1B20 (escap字符和>符号的组合)

所以每当我喜欢这样的字符,我用相应的值replace它,然后我使用7位编码。 这是工作好…

所以我的编码string是

 > AT+CMGS=15 > 0001000C911989890878800000021B1E 

而对于“[你好]”

 > AT+CMGS=21 > 0001000C911989890878800000091B1EBACC66BF373E 

再次感谢..

Interesting Posts