我正在nodejs中编写应用程序,用于在PDU模式下发送和接收短信.我使用wavecom GSM调制解调器(7位编码)发送短信.它还支持8位(AT CSMP = 1,167,8)编码方案.
我可以正确发送字母数字字符.但我不能发送像([,],| etc)这样的字符.
这里字符串:
AT+CMGS=14 0001030C911989890878800004015B
文字字符串:[
但我接受了一些垃圾角色.任何的想法?
以及如何发送多部分短信.我已经提到this和this,但我没有得到所需的输出.任何人都可以建议8位(7-bit encoding scheme)文本编码方案?
请帮我…
解决方法
根据
this page(参见发送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,105] var bytes = Encoding.BigEndianUnicode.GetBytes(text); // Encode bytes to hex representation // [0,105] -> '00480069' return BitConverter.ToString(bytes).Replace("-",""); }
请注意,根据this post,我的代码不适用于编码为代理项对的字符,因为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'));
灵感来自这些SO答案:
> Node.JS Big-Endian UCS-2
> How to do Base64 encoding in node.js?