Unicode
Unicode é um padrão universal que atribui pontos de código aos caracteres e símbolos dos sistemas de escrita de todo o mundo.
Definição
Unicode é um padrão para representar textos de muitos sistemas de escrita, além de símbolos, emoji e controlos. Cada elemento recebe um ponto de código escrito como U+ e algarismos hexadecimais, por exemplo U+0041 para A e U+20AC para €.
Um ponto de código é um número abstrato, não uma sequência de bytes. UTF-8, UTF-16 e UTF-32 definem como o guardar ou transmitir.
Pontos de código e codificações
Unicode vai de U+0000 a U+10FFFF, com intervalos reservados ou não atribuídos. UTF-8 usa um byte para ASCII e dois a quatro para outros pontos atribuídos; UTF-16 usa uma ou duas unidades de 16 bits.
ASCII está incluído em Unicode: os valores 0–127 mantêm os mesmos pontos e a mesma representação de um byte em UTF-8.
Exemplo prático
O carácter € é o ponto U+20AC. Em UTF-8, é guardado nos bytes E2 82 AC; em código-fonte também pode surgir como escape. São representações diferentes do mesmo ponto.
Um carácter visível nem sempre equivale a um ponto: é pode ser U+00E9 ou U+0065 seguido do sinal combinante U+0301.
Normalização e erros frequentes
A normalização Unicode leva sequências equivalentes a uma forma padrão escolhida e facilita comparações e pesquisas. Deve ser aplicada com cuidado, pois caracteres visualmente semelhantes podem ser realmente distintos.
O tipo de letra determina a aparência e alguns emoji ou sistemas juntam vários pontos num grafema. Contagens de bytes, pontos e caracteres visíveis podem diferir. Unicode é codificação, não criptografia.
Não. Unicode define caracteres e pontos de código; UTF-8 é uma forma de codificar esses pontos como bytes.
Não há um número único. Em UTF-8 um ponto usa um a quatro bytes, e um grafema visível pode conter vários pontos.
Podem usar sequências distintas mas canonicamente equivalentes, como uma letra pré-composta ou letra mais sinal combinante. A normalização adequada uniformiza-as.