2012-05-01 16 views
7

Piszę aplikację w nodejs do wysyłania i odbierania sms w trybie PDU. Używam modemu wavecom GSM (kodowanie 7-bitowe) do wysyłania sms. Obsługuje również 8-bitowy (AT + CSMP = 1,167,0,8) schemat kodowania.Obsługa [i] znaków w trybie PDU

Mogę poprawnie wysłać alfanumeryczny znak. Ale nie mogę wysłać znaków takich jak ([,], | itp.).

Oto ciąg: String

AT+CMGS=14  
0001030C911989890878800004015B 

Tekst: [

Ale otrzymaliśmy jakiś znak śmieci. Dowolny pomysł?

A jak wysłać wieloczęściowy SMS. Mam odniesienia this i this, ale nie otrzymuję pożądanych danych wyjściowych. Czy ktoś może zaproponować 8-bitowy (7-bit encoding scheme) system kodowania tekstu? Proszę mi pomóc ...

+0

masz jeszcze próbował ucieczki znaki? –

Odpowiedz

2

Dzięki

Wreszcie dostałam odpowiedź :)

Ten znaków ([,], |) kodują są jako dwa znaki takie jak

[ jest zakodować jako 1B1E (połączenie ucieczki charakter i < znak)

] jest zakodować jako 1B20 (połączenie charakteru ESCAP i> znak)

Zawsze, gdy lubię takie znaki, zastępuję je odpowiednimi wartościami, używam 7-bitowego kodowania. To działa dobrze ...

Więc mój ciąg kodowanie [jest

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

I "[cześć]"

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

Dzięki jeszcze raz ..

3

Zgodnie z this page (patrz sekcja Wysyłanie wiadomości SMS w formacie Unicode) kodowanie 8-bitowe to w rzeczywistości UCS-2.

nie wiem wystarczająco dużo o nodejs dać pełnego wdrożenia, ale tutaj jest próbka 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("-", ""); 
} 

Należy pamiętać, że zgodnie z this post mój kod nie zadziała dla znaków zakodowanych jako surogat parami, ponieważ Encoding.BigEndianEncoding jest UTF-16 (nie UCS-2).

Edit

Oto wersja NodeJS który wykorzystuje wbudowany w UCS2 konwertera w klasie Bufor:

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')); 

Zainspirowany tych tak odpowiada:

+0

Dziękuję, działa idealnie z bramką SMS Gammy. – Fulup

Powiązane problemy