O UCS-2 é a codificação de 16 bits que o SMS usa para qualquer texto que contenha caracteres fora do alfabeto GSM-7 — scripts não latinos, emoji, aspas curvas. Cada caractere ocupa dois octetos, pelo que um SMS UCS-2 único contém 70 caracteres e os segmentos concatenados contêm 67 cada. Um único caractere fora do GSM-7 força toda a mensagem para UCS-2.
Porque é que o SMS precisa de UCS-2
O GSM-7 cobre apenas 128 caracteres mais um pequeno conjunto de extensão. Tudo o resto — árabe, chinês, cirílico, hebraico, tailandês, emoji, e até caracteres tipográficos como aspas curvas e travessões — não é representável. Para esses, o SMS muda para UCS-2, uma codificação de 16 bits de largura fixa (efetivamente UTF-16 big-endian para o Plano Multilingue Básico). É sinalizado por data_coding 0x08.
Capacidade: 70 e 67
O campo de dados de utilizador do SMS tem 140 octetos. A dois octetos por caractere, o UCS-2 cabe em 70 caracteres numa mensagem única. Quando uma mensagem é concatenada, o User Data Header de 6 bytes consome conteúdo, deixando 134 octetos — 67 caracteres por segmento. Isto é menos de metade da capacidade do GSM-7, e é por isso que a escolha de codificação tem um grande impacto no custo.
| Codificação | SMS único | Por segmento concatenado |
|---|---|---|
| GSM-7 (7-bit) | 160 caracteres | 153 caracteres |
| Binário de 8 bits | 140 bytes | 134 bytes |
| UCS-2 (16-bit) | 70 caracteres | 67 caracteres |
O que aciona o UCS-2
A codificação é tudo-ou-nada por mensagem: um único caractere fora do GSM-7 força a mensagem inteira para UCS-2, reduzindo a capacidade de 160 para 70. Os culpados comuns são fáceis de introduzir por acidente — um apóstrofo curvo de um processador de texto, um travessão, um emoji ou um nome não latino. Detetá-los antes de enviar é a maior alavanca sobre o custo do SMS.
| Categoria | Exemplos |
|---|---|
| Emoji | 😀 ✅ 🚀 ❤️ |
| Pontuação tipográfica | ' ' “ ” – — … |
| Scripts não latinos | العربية · 中文 · Кириллица · עברית · ไทย |
| Letras acentuadas não presentes no GSM-7 | â ê î ô û ã õ ą ę ř |
A ressalva dos pares de substituição
O UCS-2 é estritamente de 16 bits e cobre o Plano Multilingue Básico do Unicode. Os caracteres acima de U+FFFF — muitos emoji modernos, por exemplo — são representados em UTF-16 como pares de substituição de duas unidades de código de 16 bits, pelo que um único desses emoji consome quatro octetos (dois 'caracteres' UCS-2). Uma mensagem que parece ter um emoji pode, por isso, contar como dois para o limite de 70/67.
Perguntas frequentes
Quantos caracteres cabem num SMS Unicode?
70 caracteres numa mensagem UCS-2 única e 67 por segmento quando a mensagem é concatenada. Isto porque cada caractere tem 16 bits (dois octetos) contra o limite de 140 octetos de conteúdo do SMS.
O que faz um SMS mudar para UCS-2?
Qualquer caractere isolado fora do alfabeto GSM-7 — um emoji, uma aspa curva, um travessão ou texto não latino — força a mensagem inteira para UCS-2. A codificação é escolhida por mensagem, não por caractere.
O UCS-2 é o mesmo que UTF-16?
Quase. O UCS-2 é de 16 bits fixos e cobre o Plano Multilingue Básico. O SMS trata o conteúdo como UTF-16 big-endian, pelo que os caracteres acima de U+FFFF (muitos emoji) tornam-se pares de substituição e ocupam quatro octetos.
Porque é que um emoji às vezes conta como dois caracteres?
Os emoji acima de U+FFFF são codificados como pares de substituição UTF-16 — duas unidades de código de 16 bits — pelo que um único glifo consome dois dos 70 (ou 67) lugares de caractere UCS-2 disponíveis.
Como evito enviar UCS-2 acidentalmente?
Higienize a entrada antes de enviar: substitua aspas e travessões tipográficos pelos seus equivalentes ASCII, remova ou translitere acentos avulsos e verifique se há emoji. Um verificador GSM-7/Unicode assinala os caracteres exatos que forçam o UCS-2.
Especificações de origem
Os padrões publicados nos quais esta página se baseia. Abre num novo separador.