£ codificación en el mensaje SMS enviado a través de puerta de enlace no funciona correctamente

StackOverflow https://stackoverflow.com/questions/690773

  •  22-08-2019
  •  | 
  •  

Pregunta

Tengo problemas con un mensaje SMS Estoy enviando el uso de un proveedor de llamada cymba.

Básicamente estoy publicando el mensaje a ellos como por su URL codificada especificaciones.

Sin embargo, cuando se envía el mensaje a mi teléfono del £ aparece con una A en la parte delantera es decir, £ A

Ahora C # cadenas son Unicode de manera predeterminada, por lo que me pasa a la codificación ASCII y el £ viene el cargo de?.

He intentado convertir la cadena del mensaje a hexadecimal forma de comenzar las versiones de Unicode y ASCII (como a través de esta puerta de enlace que se sometan también un mensaje como hex). Sin embargo, el mismo comportamiento se produce.

Sospecho que es algo que ver con la cadena de codificación como SMS soporta un formato de codificación de 7 bits: GSM 03.38

Sospecho también que si envío a través de Unicode que sólo obtendrá un mensaje de 70 o 140 Char en lugar de la norma 160.

Soy bastante nuevo para el envío de SMS por lo que será apreciado cualquier ayuda o consejo.

Así que la pregunta es, ¿cómo puedo hacer que mi C # cadenas en este formato?

Actualización: Parece que la puerta de enlace es el que tiene el problema no mi código como he tratado de sustituir el infractor £ con el valor hexadecimal equivalente de 7 bits y esto tampoco funcionó. Véase más abajo para mi código de prueba que puede ayudar a otros en el futuro:

byte pound = 0xA3;
byte GSMPound = 0x01;
string hexxedMsg = "";
System.Text.UnicodeEncoding encoder = new System.Text.UnicodeEncoding();
byte[] msgBytes = encoder.GetBytes(message);

foreach (byte byt in msgBytes)
{
    if(byt == pound)
        hexxedMsg += GSMPound.ToString("X");
    else
        hexxedMsg += byt.ToString("X2"); ;
}
¿Fue útil?

Solución

Hay una rel="nofollow GSM 03.38 a Unicode tabla de asignación disponible que sugiere £ que se codificarán como 0x01 lo que podría intentar que (sólo difícil de codificación para un solo intento). Sin embargo, realmente debería comprobar todo esto con el operador de puerta de enlace. Es la puerta de entrada realmente esperando que usted fije en GSM 03.38 codificación URL? Si es así, que la tabla de asignación es probablemente el camino a seguir - puede que tenga que escribir su propia aplicación para mapear de una cadena de bytes (System.Text.Encoding totalmente implementación sería una exageración). Me gustaría probar con un mensaje codificado primero sin embargo.

Otros consejos

Esta página contiene información sobre la "alfabeto por defecto de 7 bits" .

La solución más simple puede ser la de crear un diccionario que mapea los puntos de código Unicode codificadas por los GSM 03.38 estándar (aproximadamente 140 glifos) en 1 o 2 bytes (se necesitan 2 bytes para el 0x27, 0x ?? pares).

Una vez hecho esto (dependiendo de su proveedor) también puede tener que apretar los bytes de 8 bits en un flujo de secuencias de 7 bits. Hay una visual muestra aquí.

Y después de haber logrado todo eso (y tuvimos un par de cervezas!) Puede que desee convertirla en una aplicación System.Text.Encoding.


También puede ser que desee echar un vistazo a PDUDecoder en CodeProject de la operación inversa. Hay una versión en línea también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top