2012-05-01 10 views
7

Ich schreibe Anwendung in Nodejs zum Senden und Empfangen von SMS im PDU-Modus.Ich benutze Wavecom GSM-Modem (7-Bit-Codierung), um SMS zu senden. Es unterstützt auch 8 Bit (AT + CSMP = 1.167,0,8) Kodierungsschema.Unterstützt [und] Zeichen im PDU-Modus

Ich kann alphanumerische Zeichen richtig senden. Aber ich kann kein Zeichen wie ([,], | etc) senden.

Hier string:

AT+CMGS=14  
0001030C911989890878800004015B 

Text String: [

Aber ich empfangen einige Junk-Charakter. Irgendeine Idee?

Und wie Multipart-SMS senden. Ich habe verwiesen this, und this, aber ich bekomme nicht gewünschte Ausgabe. kann jemand 8-Bit (7-bit encoding scheme) Textcodierungsschema vorschlagen? Bitte helfen Sie mir ...

+0

haben Sie versucht, doch die Zeichen zu entkommen? –

Antwort

2

Danke,

Schließlich bekam ich die Antwort :)

Diese Zeichen ([,], |) sind kodieren als zwei Zeichen wie

[ ist kodieren als 1B1E (Kombination der Flucht Zeichen und Zeichen <)

] ist encode als 1B20 (Kombination aus escap Charakter und> Zeichen)

Also wann immer ich solche Zeichen liebte ich es mit entsprechenden Wert dann habe ich 7-Bit-Codierung. Es ist Arbeit gut ...

meine Codierung String für [So ist

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

Und für "[hallo]"

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

Noch einmal vielen Dank ..

3

Laut this page (siehe Abschnitt Senden einer Unicode-SMS-Nachricht) ist die 8-Bit-Codierung tatsächlich UCS-2.

Ich weiß nicht genug über NodeJS Ihnen die vollständige Umsetzung zu geben, aber hier ist ein .NET-Beispiel:

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("-", ""); 
} 

Bitte beachten Sie, dass nach this post mein Code nicht für Zeichen arbeiten als Surrogat codierten Paare, weil Encoding.BigEndianEncoding UTF-16 ist (nicht UCS-2).

bearbeiten

Hier ist NodeJS Version, die verwendet eingebaute in UCS2-Wandler in Pufferklasse:

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

durch diese SO Antworten inspiriert:

+0

Danke, es funktioniert perfekt mit Gammy SMS Gateway. – Fulup