javascript – 在PDU模式下支持[和]字符

我正在nodejs中编写应用程序,用于在PDU模式下发送和接收短信.我使用wavecom GSM调制解调器(7位编码)发送短信.它还支持8位(AT CSMP = 1,167,8)编码方案.

我可以正确发送字母数字字符.但我不能发送像([,],| etc)这样的字符.

这里字符串:

AT+CMGS=14    
0001030C911989890878800004015B

文字字符串:[

但我接受了一些垃圾角色.任何的想法?

以及如何发送多部分短信.我已经提到thisthis,但我没有得到所需的输出.任何人都可以建议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?

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...