2012-05-01 72 views
7

我正在寫nodejs中的應用程序,用於在PDU模式下發送和接收短信。我使用wavecom GSM調制解調器(7位編碼)發送短信。它也支持8位(AT + CSMP = 1,167,0,8)編碼方案。在PDU模式下支持[和]字符

我可以正確發送字母數字字符,但我不能發送像([,],|等)一些字符。

以下字符串:

AT+CMGS=14  
0001030C911989890878800004015B 

文本字符串:[

但我收到一些垃圾字符。任何想法?

以及如何發送多部分短信。我有thisthis,但我沒有得到所需的輸出。任何人都可以推薦8位(7-bit encoding scheme)文本編碼方案嗎? 請幫助我...

+0

你試圖逃跑的人物嗎? –

回答

2

感謝,

最後我得到了答案:)

該字符([],|)的編碼爲兩個字符,如

[是編碼爲1B1E(逃生組合字符和<符號)

]編碼爲1B20(escap字符和>符號的組合)

所以,每當我喜歡這樣的字符,我用相應的值替換它,然後我使用7位編碼。這很好...

所以我對[編碼字符串

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

而對於 「[你好]」

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

再次感謝..

3

根據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, 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)。

編輯

這裏的NodeJS版本,它使用內置的UCS2轉換器Buffer類:

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短信網關完美配合。 – Fulup

相關問題