Unicode no Javascript

unicode (1)

Os programas JavaScript são escritos usando o conjunto de caracteres Unicode, e você pode usar qualquer caractere Unicode em strings e comentários. Para portabilidade e facilidade de edição, é comum usar apenas letras e dígitos ASCII nos identificadores. Mas esta é apenas uma convenção de programação, e a linguagem permite letras, dígitos e ideogramas Unicode (mas não emojis) em identificadores. Isso significa que os programadores podem usar símbolos matemáticos e palavras de outros idiomas como constantes e variáveis:

const π = 3.14;
const sí = true;

Sequências de escape Unicode

Alguns hardwares e softwares de computador não podem exibir, inserir ou processar corretamente o conjunto completo de caracteres Unicode. Para oferecer suporte a programadores e sistemas que usam tecnologia mais antiga, JavaScript define sequências de escape que nos permitem escrever caracteres Unicode usando apenas caracteres ASCII. Esses escapes Unicode começam com os caracteres \u e são seguidos por exatamente quatro dígitos hexadecimais (usando letras maiúsculas ou minúsculas de A a F) ou por um a seis dígitos hexadecimais entre chaves. Esses escapes Unicode podem aparecer em literais de string JavaScript, literais de expressão regular e identificadores (mas não em palavras-chave de linguagem). O escape Unicode para o caractere “é”, por exemplo, é \u00E9; aqui estão três maneiras diferentes de escrever um nome de variável que inclua este caractere:

let café = 1; // Define uma variável usando um caractere Unicode
caf\u00e9 // => 1; acessa a variável usando uma sequência de escape
caf\u{E9} // => 1; outra forma da mesma sequência de escape

As primeiras versões de JavaScript suportavam apenas o escape de quatro dígitos seqüência. A versão com colchetes foi introduzida no ES6 para suporte melhor a pontos de código Unicode que exigem mais de 16 bits, como emoji:

console.log ("\u{1F600}"); // Imprime um emoji de rosto sorridente 😀

Os escapes Unicode também podem aparecer em comentários, mas como os comentários são ignorados, eles são simplesmente tratados como caracteres ASCII naquele contexto e não são interpretados como Unicode.

Normalização Unicode

Se você usar caracteres não ASCII em seus programas JavaScript, deve estar ciente de que o Unicode permite mais de uma maneira de codificar o mesmo caractere. A string “é”, por exemplo, pode ser codificada como o caractere Unicode único \u00E9 ou como um ASCII “e” regular seguido pela marca de combinação de acento agudo \u0301. Essas duas codificações normalmente parecem exatamente iguais quando exibidas por um editor de texto, mas têm codificações binárias diferentes, o que significa que são consideradas diferentes pelo JavaScript, o que pode levar a programas muito confusos:

const café = 1; // Esta constante é chamada de "caf\u{e9}"
const café = 2; // Esta constante é diferente: "cafe\u{301}"
café // => 1: Esta constante tem um valor
café // => 2: Esta constante indistinguível tem um valor diferente

O padrão Unicode define a codificação preferida para todos os caracteres e especifica um procedimento de normalização para converter o texto em um formato canônico adequado para comparações. JavaScript assume que o código-fonte que está interpretando já foi normalizado e não faz nenhuma normalização por conta própria. Se você planeja usar caracteres Unicode em seus programas JavaScript, deve garantir que seu editor ou alguma outra ferramenta execute a normalização Unicode de seu código-fonte para evitar que você termine com identificadores diferentes, mas visualmente indistinguíveis.

Texto retirado do livro "Javascript The Definitive Guide" de David Flanagan.

Lista de Posts