Um apóstrofo curvo pode mudar o preço de um texto que, fora isso, contém letras latinas comuns. O telefone exibe praticamente a mesma frase. Bird precisa de mais segmentos de rede para enviá-la.
Quais são as duas codificações?
GSM-7 usa um alfabeto compacto, enquanto UCS-2 representa caracteres fora desse alfabeto.
Letras latinas comuns, dígitos, pontuação comum e algumas letras acentuadas cabem em GSM-7. A especificação do alfabeto SMS define esse conjunto.
UCS-2 transporta caracteres fora desse conjunto, incluindo aspas curvas e emoji. Alguns emoji contam em dobro no seu limite de caracteres.
Textos em chinês, japonês, coreano, cirílico, árabe, tailandês e hindi exigem caracteres fora do alfabeto GSM-7 do Bird.
Como Bird escolhe a codificação?
Bird testa todo o corpo contra GSM-7 e usa UCS-2 se qualquer caractere falhar nesse teste.
A codificação se aplica ao corpo inteiro. Um apóstrofo curvo não recebe uma codificação separada das palavras ao redor. Sua presença muda a codificação dessas palavras também.
Você pode verificar o resultado em segments.encoding, cujos valores são GSM_7BIT e UCS2.
Como a codificação altera a contagem de segmentos?
A codificação mais ampla deixa menos espaço para texto em cada segmento faturável.
Bird usa estes limites:
| Codificação | Segmento único | Cada parte quando dividido |
|---|---|---|
| GSM-7 | 160 caracteres | 153 caracteres |
| UCS-2 | 70 caracteres | 67 caracteres |
Esses limites contam certos caracteres em dobro, conforme listado abaixo. Cada parte dividida reserva espaço de cabeçalho para que o telefone possa juntar as partes. SMS concatenado explica o cabeçalho.
Um corpo com 155 letras latinas comuns ocupa um segmento GSM-7. Adicione um apóstrofo curvo e o corpo de 156 caracteres muda para UCS-2. Ele excede 70, então o limite multipartes se aplica: 156 dividido por 67 arredonda para três segmentos.
Bird cobra cada segmento separadamente. Segmentos SMS explica como a contagem se torna a quantidade faturável.
Quais caracteres exigem atenção especial?
Pontuação curva, emoji e letras fora do alfabeto GSM-7 podem alterar a codificação de toda a mensagem.
- Apóstrofos retos cabem em GSM-7; apóstrofos curvos não.
- Um hífen simples cabe; travessões tipográficos curtos e longos não.
- Três pontos cabem; o caractere único de reticências
…não. éeücabem;á,íeúnão.
GSM-7 conta estes caracteres em dobro: ^, {, }, \, [, ], ~, | e €. Form feed, um caractere de controle que solicita quebra de página, também conta em dobro. Oitenta sinais de euro, portanto, preenchem um segmento.
Em UCS-2, um emoji como 😀 conta em dobro. Trinta e cinco preenchem um segmento. Adicionar mais um excede sua capacidade.1
A codificação inteligente pode evitar a troca?
A codificação inteligente pode substituir pontuação suportada quando todos os caracteres resultantes cabem em GSM-7.
Você a ativa por envio com options.smart_encoding, um booleano que aceita true ou false, com false como padrão. Um apóstrofo curvo pode se tornar um apóstrofo reto. Uma reticência pode se tornar três pontos.
Bird mantém o corpo original inalterado se qualquer caractere não suportado permanecer. Texto em árabe ou japonês, portanto, mantém os limites de capacidade Unicode. Alterar a configuração não faz esses alfabetos caberem em GSM-7.
Codificação inteligente descreve as regras de substituição, e a calculadora de segmentos verifica o texto antes do envio.
Footnotes
-
Para calculadoras personalizadas, Bird mede GSM-7 em septetos e
UCS2em code units UTF-16. Caracteres de extensão GSM-7 usam dois septetos. UTF-16 usa duas code units para caracteres fora do primeiro bloco do Unicode, incluindo😀. ↩
Em resumo
O corpo da mensagem determina a codificação.
Bird usa GSM-7 quando todos os caracteres cabem no seu alfabeto e UCS-2 quando qualquer caractere está fora dele.
Alguns caracteres contam em dobro.
Texto em latim simples comporta 160 caracteres por segmento. O alfabeto mais amplo comporta 70, com alguns emoji contando em dobro.
A divisão reduz a capacidade de cada parte.
Mensagens multipartes reservam espaço para o cabeçalho. Texto em latim simples então comporta 153 caracteres por parte. O alfabeto mais amplo comporta 67, contando alguns caracteres em dobro.
A codificação inteligente exige uma escolha explícita.
Bird substitui caracteres suportados somente quando você ativa a opção e o resultado inteiro cabe em GSM-7.