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

7

我正在使用nodejs编写应用程序,以PDU模式发送和接收短信。我使用Wavecom GSM modem(7位编码)发送短信。它还支持8位(AT+CSMP=1,167,0,8)编码方案。

我可以正确发送字母数字字符。但是我无法发送一些字符,例如([,],|等)。

这里是字符串:

AT+CMGS=14    
0001030C911989890878800004015B

文本字符串:[

但我收到了一些垃圾字符。有什么想法吗?

如何发送多部分短信?我已经参考了这个这个,但没有得到所需的输出。有人可以建议一个8位(7位编码方案)的文本编码方案吗? 请帮帮我...


你尝试过转义字符了吗? - Gonçalo Vieira
2个回答

4
根据此页面(请参阅发送Unicode短信消息部分),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)。 编辑 这里是NodeJS版本,它使用Buffer类中内置的UCS2转换器:
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'));

参考以下Stack Overflow回答的思路:


谢谢,它与Gammy SMS网关完美配合。 - Fulup

2

谢谢!

终于找到答案了:)

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

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

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

所以每当我遇到这些字符时,我就用相应的值替换它,然后使用7位编码。 运行良好...

所以我的 [ 的编码字符串是

> AT+CMGS=15
> 0001000C911989890878800000021B1E

关于"[hello]"的内容

> AT+CMGS=21
> 0001000C911989890878800000091B1EBACC66BF373E

感谢再次光临。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接