2012-05-01 19 views
7

Estoy escribiendo una aplicación en nodejs para enviar y recibir sms en modo PDU. Utilizo el módem wavecom GSM (codificación de 7 bits) para enviar sms. También es compatible con el esquema de codificación de 8 bits (AT + CSMP = 1,167,0,8).Compatibilidad con caracteres [y] en modo PDU

Puedo enviar caracteres alfanuméricos correctamente. Pero no puedo enviar algunos caracteres como ([,], | etc.).

Aquí cadena: Cadena

AT+CMGS=14  
0001030C911989890878800004015B 

Texto: [

Pero Recibo algún carácter no deseado. ¿Alguna idea?

Y cómo enviar multipart sms. He referido this, y this pero no obtengo la salida deseada. ¿Alguien puede sugerir un esquema de codificación de texto de 8 bits (7-bit encoding scheme)? Por favor, ayúdenme ...

+0

has necesitado escapar los caracteres todavía? –

Respuesta

2

Gracias,

Finalmente Tengo la respuesta :)

Esta caracteres ([,], |) son codifican como dos personajes como

[ es codificar como 1B1E (Combinación de fuga carácter y < signo)

] es codificar como 1B20 (Combinación de caracteres y escap> signo)

Así que cada vez que me gusta esos caracteres lo reemplacé con el valor correspondiente y luego uso la codificación de 7 bits. Funciona bien ...

Así que mi cadena de codificación de [es

> AT+CMGS=15 
> 0001000C911989890878800000021B1E 

Y para "[hola]"

> AT+CMGS=21 
> 0001000C911989890878800000091B1EBACC66BF373E 

Gracias una vez más ..

3

De acuerdo con this page (consulte la sección Envío de un mensaje SMS Unicode), la codificación de 8 bits es, de hecho, UCS-2.

No sé lo suficiente sobre nodejs para darle la aplicación plena, pero aquí es un ejemplo de .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("-", ""); 
} 

Tenga en cuenta que de acuerdo con this post mi código no funcionará para caracteres codificados como sustituta pares, porque Encoding.BigEndianEncoding es UTF-16 (no UCS-2).

Editar

He aquí la versión NodeJS que utiliza el convertidor incorporado UCS2 en clase 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')); 

Inspirado por estas respuestas SO:

+0

Gracias, funciona perfectamente con Gammy SMS gateway. – Fulup

Cuestiones relacionadas