2012-05-01 21 views
7

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

アルファベット文字を正しく送信できますが、([、]、|などのような文字は送信できません。ここで

文字列:

AT+CMGS=14  
0001030C911989890878800004015B 

テキスト文字列:[

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

マルチパートSMSを送信する方法。私はthisthisを参照していますが、出力が得られません。誰も8ビット(7-bit encoding scheme)のテキスト符号化方式を提案できますか? 助けてください...

+0

は、あなたがまだ文字をエスケープしようとしたがありますか? –

答えて

2

おかげで、最後に、私はこの文字([、]、|)答え:)

を得た

[のような2つの文字としてあるエンコードは、エスケープの1B1E(組み合わせとしてエンコードされ文字と<符号)

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

私はそのような文字を好きになるたびに、対応する値に置き換えた後、7ビットのエンコーディングを使用します。それは良い仕事です...

だから、[のための私のエンコーディング文字列が

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

そして "[ハロー]" のためである

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

おかげで再び..

3

this page(see sectionユニコード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("-", ""); 
} 

this post私のコードに応じて代理としてエンコードされた文字では動作しませんのでご注意くださいEncoding.BigEndianEncodingはUTF-16(UCS-2ではありません)であるためです。ここで

編集

内蔵のバッファクラスのUCS2コンバータを使用していますNodeJSのバージョンは次のとおりです。

これらのSOの答えに触発さ
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')); 

+0

ありがとう、それはGammy SMSゲートウェイと完全に動作します。 – Fulup

関連する問題