Emoji e Unicode

Estou a criar uma base de dados para guardar toda a informação sobre emoji, nomeadamente, códigos, nomes, significados, expressões emocionais.

Estou a usar a versão 4.0, o standard mais recente de representação de emoji em Unicode.

Na especificação do Unicode, os códigos dos emoji vêm indicados em utf32, mas nos textos da net@ que usam emoji, estes são codificados em utf8. A conversão é simples, e pode ser resumida como indicado abaixo:

Os carateres ASCII, com códigos de 0 a 127, são representados apenas por um octeto.
Nos carateres com mais do que um octeto, o 2º, 3º e 4º octetos UTF-8 começam com 2, 3 ou 4 bits a um, seguidos de um bit a zero. Os octetos seguintes começam sempre com o padrão de dois bits 10, sendo os restantes 6 bits usados para dados.

1-byte UTF-8 = 0xxxxxxxbin = 7 bits = 0-7Fhex
2-byte UTF-8 = 110xxxxx 10xxxxxxbin = 5+6(11) bits = 80-7FFhex
3-byte UTF-8 = 1110xxxx 10xxxxxx 10xxxxxxbin = 4+6+6(16) bits = 800-FFFFhex
4-byte UTF-8 = 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxbin = 3+6+6+6(21) bits = 10000-10FFFFhex

Os códigos Unicode não estão definidos para cima de 10FFFFhex.

Exemplos de conversão de utf32 para utf8:

U+006D = 1101101bin = 01101101bin = 6Dhex
U+0416 = 10000 010110bin = 11010000 10010110bin = D0 96hex
U+4E3D = 0100 111000 111101bin = 11100100 10111000 10111101bin = E4 B8 BDhex

O meu objetivo é analisar textos originais em utf8 e classificá-los de acordo com os atributos dos emoji.

Tenho algumas dúvidas sobre como devo armazenar os códigos na base de dados. Vou guardar toda a informação original que consta no standard, mas vou também ter um campo com os carateres codificados em utf8 para comparação imediata, com as páginas a analisar na net@. Provavelmente a melhor solução é usar um campo do tipo CHAR(1) CHARSET utf8, ao invés de guardá-los como uma sequência de octetos binários, pois os textos a analisar são isso mesmo: texto.

Vou avançar assim. Se for necessário, reformulo e começo tudo de novo.


Publicado

em

por

Etiquetas:

Comentários

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *