Pontos de código, escapes e UTF-16
Unicode atribui um ponto de código a cada caráter abstrato. A notação U+1F600 e o escape \u{1F600} referem-se diretamente ao ponto de código do emoji 😀.
O escape tradicional \uXXXX contém exatamente uma unidade UTF-16. Carateres acima de U+FFFF precisam de duas unidades: um substituto alto seguido de um substituto baixo.
A ferramenta analisa apenas sequências explícitas e nunca usa eval ou new Function. Isto evita transformar texto fornecido pelo utilizador em código executável.
Como converter escapes Unicode
- Escolha Codificar para transformar texto em notação Unicode.
- Selecione U+, \u{…} ou \uXXXX conforme o formato necessário.
- Escolha Descodificar para restaurar tokens Unicode em texto.
- Separe tokens U+ e escapes com espaços quando necessário; sequências \uXXXX podem ser adjacentes.
- Use o exemplo de emoji para verificar o tratamento de pares de substitutos UTF-16.
Exemplos de escapes e pares de substitutos UTF-16
Os casos mostram BMP, carateres suplementares, três sintaxes e rejeição de substitutos isolados.
| Entrada | Saída | Direção da conversão | Notas |
|---|---|---|---|
A |
U+0041 |
Codificar | Ponto de código ASCII. Os carateres latinos básicos têm um ponto de código e uma unidade de código UTF-16. |
😀 |
U+1F600 |
Codificar | Ponto de código de emoji. O emoji é um valor escalar Unicode acima do Plano Multilingue Básico. |
😀 |
\u{1F600} |
Codificar | Escape com chaves. A notação com chaves do ECMAScript escreve diretamente o valor escalar completo. |
😀 |
\uD83D\uDE00 |
Codificar | Par substituto UTF-16. A sintaxe de quatro dígitos representa o mesmo emoji com unidades substitutas alta e baixa. |
U+4F60 U+597D |
你好 |
Descodificar | Descodificar pontos de código chineses. Os tokens de ponto de código podem ser separados por espaços ou vírgulas. |
\u0041\u{1F600} |
A😀 |
Descodificar | Formas de escape mistas. O analisador estrito pode combinar formas suportadas, mas rejeita código-fonte não relacionado. |
Sintaxes e validação aceites
A descodificação aceita tokens U+hex, escapes \u{hex} e escapes \u com quatro dígitos. Os espaços podem separar tokens, mas o texto arbitrário misturado não é interpretado como código.
Valores acima de U+10FFFF, pontos no intervalo reservado às unidades substitutas UTF-16 e pares UTF-16 incompletos são rejeitados.
- Hexadecimal não diferencia maiúsculas e minúsculas.
- \uXXXX precisa de quatro dígitos exatos.
- Um substituto alto deve ser seguido por um baixo.
- Um substituto baixo isolado é inválido.
- Nenhuma sequência é executada.
Como a conversão trata carateres suplementares
Na codificação, Array.from percorre pontos de código completos em vez de dividir pares de substitutos UTF-16. U+ e \u{…} recebem um token por caráter.
Na forma \uXXXX, pontos acima de U+FFFF são convertidos em duas unidades UTF-16 usando o deslocamento de 0x10000.
Na descodificação, o analisador valida cada token, combina pares de substitutos UTF-16 e chama String.fromCodePoint apenas com valores escalares seguros.
Usos práticos de escapes Unicode
A notação explícita ajuda a inspecionar carateres invisíveis e a trocar dados entre formatos que possuem regras próprias.
| Item | Descrição |
|---|---|
| Depuração de texto | Distingue espaços, sinais semelhantes e carateres suplementares. |
| Ficheiros de configuração | Alguns formatos exigem escapes específicos para carateres não ASCII. |
| Testes de software | Casos com emoji e pares de substitutos UTF-16 revelam truncamentos. |
| Documentação técnica | U+ fornece uma referência independente de fonte ou renderização. |
| Análise segura | A entrada é analisada como dados e não como código. |
Erros e limites Unicode
Um erro comum é tratar uma unidade UTF-16 como se fosse um caráter completo. Isto produz metade de um emoji ou uma unidade substituta isolada.
Outra fonte de erro é confundir escape JavaScript, JSON, CSS e HTML; cada linguagem possui gramática diferente.
- U+D800 a U+DFFF não são valores escalares isolados.
- U+110000 está fora do Unicode.
- \u{…} precisa de uma chaveta de fecho.
- Texto livre não é executado nem interpolado.
- Entidades HTML não são escapes Unicode.
Escapes Unicode comparados a entidades e percent-encoding
Escapes Unicode descrevem carateres ou unidades de código. Entidades HTML pertencem ao analisador HTML, e percent-encoding representa bytes em componentes de URL.
UTF-8 é uma codificação de bytes, enquanto \uXXXX expressa unidades UTF-16 em texto.
| Item | Descrição |
|---|---|
| Entidades HTML | Usam formas como 😀 dentro de HTML. |
| Percent-encoding | Usa bytes UTF-8 como sequências %HH em URLs. |
| UTF-8 binário | Converte pontos de código numa sequência de bytes de tamanho variável. |