7

PDUモードでSMSを送受信するためのnodejsでアプリケーションを作成しています.wavecom GSMモデム(7ビットエンコーディング)を使用してSMSを送信します。また、8 ビット (AT+CSMP=1,167,0,8) エンコード方式もサポートしています。

英数字はちゃんと送れますが、([,],|等)は送れません。

ここで文字列:

AT+CMGS=14    
0001030C911989890878800004015B

テキスト文字列:[

しかし、私はいくつかのジャンク文字を受け取ります. 何か案が?

そして、マルチパート SMS を送信する方法。thisthisを参照しましたが、目的の出力が得られません。8 ビット ( 7 ビット エンコーディング スキーム) のテキスト エンコーディング スキームを提案できる人はいますか? 私を助けてください...

4

2 に答える 2

4

このページ(セクション 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'));

これらのSOの回答に触発されました:

于 2012-05-25T10:30:58.823 に答える
2

ありがとう、

最後に私は答えを得ました:)

この文字 ([、]、|) は、次のような 2 つの文字としてエンコードされます。

[としてエンコードされます1B1E(エスケープ文字と < 記号の組み合わせ)

]としてエンコードされます1B20(エスケープ文字と > 記号の組み合わせ)

そのため、そのような文字が好きなときはいつでも、対応する値に置き換えてから、7 ビット エンコーディングを使用します。ワークグッドです...

したがって、 [ のエンコード文字列は

> AT+CMGS=15
> 0001000C911989890878800000021B1E

そして「[こんにちは]」

> AT+CMGS=21
> 0001000C911989890878800000091B1EBACC66BF373E

もう一度ありがとう..

于 2012-05-26T10:52:24.407 に答える