¿Enviar emoji a través de SMS con UTF-8 (en lugar de UTF-16)?

Al tratar de averiguar por qué los emoji causaron que incluso los mensajes cortos se enviaran como varios fragmentos, encontré esta pregunta , explicando que esto sucede porque están codificados en UTF-16 en lugar de ascii.

Mi pregunta ahora es: ¿hay alguna forma de enviarlos en UTF-8? La mayoría de los mensajes que envío contienen muchas letras latinas y muy pocos otros caracteres, por lo que todos deberían ser mucho más cortos si están codificados en UTF-8: ¿es posible?

Estoy ejecutando Cyanogenmod 11-M12 (Android 4.4.4) y, en caso de que importe, uso el teclado SwiftKey.

En caso de que esto no sea posible, ¿es una cuestión del protocolo SMS, o se debe al sistema operativo, o incluso al teclado?

¡Muchas gracias!

Es una cuestión de las páginas de códigos que usa el sistema operativo. La página de 8 bits (0-255) ya está llena de letras, símbolos y caracteres de control comunes. Los idiomas no latinos también recurren a UTF-16 o a su página de códigos personalizada. El problema es que UTF-16 generalmente se usa para superar cualquier problema de conversión para que todos reciban el mismo mensaje y no una basura de caracteres aleatorios en una fila.

Respuestas (1)

Lamentablemente, esta es una limitación en el protocolo SMS.

El conjunto de caracteres "ascii" no es el normal al que estamos acostumbrados en el mundo de la informática, sino que es de 7 bits (o GSM 03.38 https://en.wikipedia.org/wiki/GSM_03.38 ) y muy limitado.

Si se usa un solo carácter fuera de este conjunto de caracteres de 7 bits, se cambia a UCS2 (consulte más información sobre UCS2 que no es exactamente UTF-16 aquí https://en.wikipedia.org/wiki/UTF-16 ).

Con 7 bits, cada carácter toma 7 bits (doh), y con UCS2 cada carácter toma 16 bits.

Mientras codificaba algunas integraciones SMPP (el protocolo SMS), he visto soporte esporádico para otros conjuntos de caracteres, pero no creo que esto se adopte en absoluto.