BroadNet
Codificación de SMSJuegos de caracteres

El juego de caracteres GSM-7

Actualizado el 3 min de lecturaBasado en estándares
Respuesta directa

GSM-7 es el alfabeto por defecto de 7 bits definido en GSM 03.38 (3GPP TS 23.038) para SMS. Codifica 128 caracteres —letras latinas, dígitos, puntuación y algunos caracteres acentuados y griegos— en 7 bits cada uno. Diez caracteres extra viven en una tabla de extensión y cada uno cuesta dos septetos. El texto cabe en 160 caracteres por SMS individual.

§01

La tabla básica (128 caracteres)

El alfabeto por defecto GSM-7 empaqueta 128 caracteres en 7 bits cada uno. Cubre el alfabeto latino en mayúsculas, los dígitos, la puntuación común, un conjunto de vocales latinas acentuadas, los signos de sección y de moneda, y varias letras griegas en mayúscula usadas como símbolos. Cada carácter aquí cuesta exactamente un septeto (7 bits).

Alfabeto básico GSM-7 (por grupo)
GrupoCaracteres
Mayúsculas latinasA B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Minúsculas latinasa b c d e f g h i j k l m n o p q r s t u v w x y z
Dígitos0 1 2 3 4 5 6 7 8 9
Puntuación! " # % & ' ( ) * + , - . / : ; < = > ? _
Latín con acentosà ä å æ è é ì ñ ò ö ø ù ü Ä Å Æ Ç É Ñ Ö Ø Ü ß
Símbolos griegosΔ Φ Γ Λ Ω Π Ψ Σ Θ Ξ
Moneda / símbolos£ $ ¥ ¤ € (ext) § ¡ ¿ @
Espacios en blancoSP (espacio), CR, LF
§02

La tabla de extensión

Diez caracteres no están en la tabla básica. Se alcanzan con un prefijo de escape (0x1B) seguido del código del carácter en la tabla de extensión, lo que significa que cada uno cuesta dos septetos, no uno. Incluir cualquiera de ellos en un mensaje reduce la capacidad efectiva de un SMS individual. Ten en cuenta que el signo del euro (€) es uno de ellos.

Tabla de extensión GSM-7 — cada uno cuesta 2 septetos
CarácterNombre
|Barra vertical
^Caret / acento circunflejo
€Símbolo del euro
{Llave izquierda
}Llave derecha
[Corchete izquierdo
]Corchete derecho
~Tilde
\Barra invertida
FFSalto de página
§03

Empaquetado de 7 bits

Como cada carácter son 7 bits pero los octetos son de 8 bits, GSM-7 empaqueta los septetos cruzando las fronteras de byte. Ocho caracteres de 7 bits se empaquetan en siete octetos de 8 bits, así que 160 septetos llenan 140 octetos, el límite de datos de usuario del SMS. El empaquetado desplaza los bits de cada carácter sucesivo para rellenar los huecos, y por eso una vista ingenua de un byte por carácter de un SMS GSM-7 parece desordenada.

Empaquetado de septetos — 160 septetos → 140 octetostext
8 characters (56 bits) ────► 7 octets (56 bits)
160 GSM-7 septets       ────► 140 octets (the SMS payload limit)
                              (an extension char = 2 septets)
§04

Tablas de desplazamiento de idioma

3GPP TS 23.038 también define tablas de desplazamiento de idioma nacionales (por ejemplo, turco, español, portugués) que remapean algunas posiciones de la tabla de extensión a letras específicas del idioma. La compatibilidad es irregular entre terminales y redes, así que muchos remitentes evitan depender de ellas y recurren a UCS-2 cuando un mensaje necesita caracteres fuera del conjunto básico GSM-7.

Preguntas frecuentes

Preguntas frecuentes

¿Cuántos caracteres caben en un SMS GSM-7?

160 caracteres en un SMS individual, porque 160 septetos de 7 bits cada uno llenan el límite de 140 octetos de datos de usuario. Los mensajes GSM-7 concatenados bajan a 153 caracteres por segmento para dejar sitio al User Data Header.

¿Qué caracteres cuentan como dos en GSM-7?

Los diez caracteres de la tabla de extensión —| ^ € { } [ ] ~ \ y salto de página— cuestan cada uno dos septetos porque necesitan un prefijo de escape. Usar cualquiera de ellos reduce cuánto texto cabe en un SMS individual.

¿Está el signo del euro en GSM-7?

Sí, pero en la tabla de extensión, así que cuesta dos septetos en lugar de uno. Por tanto, un mensaje que contiene € cabe en menos caracteres antes de necesitar un segundo segmento.

¿Por qué un mensaje GSM-7 parece desordenado a nivel de byte?

Porque GSM-7 empaqueta caracteres de 7 bits cruzando las fronteras de octeto de 8 bits. Ocho caracteres ocupan siete octetos, así que leer la carga a un byte por carácter da un sinsentido: primero hay que desempaquetar los septetos.

¿Qué ocurre si mi texto tiene un carácter que no está en GSM-7?

Todo el mensaje debe cambiar a la codificación UCS-2 (16 bits), lo que reduce la capacidad de un SMS individual de 160 a 70 caracteres. Un único carácter fuera de GSM-7 (un emoji, una comilla tipográfica o muchas letras no latinas) fuerza este cambio.

Referencias

Especificaciones de la fuente

Las normas publicadas en las que se basa esta página. Se abre en una pestaña nueva.

BNMantenido por el equipo de ingeniería BroadNet·Mensajería de nivel empresarial desde 2003.
Colócalo en el cable

Desarrollado con un enlace SMPP real y una API REST.

Solicita acceso de prueba con claves de prueba reales: primero envía a tu propio número verificado y, una vez aprobada tu identidad de remitente y las rutas, pasa a producción en más de 200 países.