Python, MySQL e Unicode

Ao fim de algumas horas, lá consegui ler carateres Unicode de 4 octetos em utf32 e utf8 para uma base de dados MySQL, em Python.

O código dos carateres vinha, do ficheiro original de emojis, em utf32. Eu queria guardá-lo nesse formato, mas também convertê-lo para utf8.

Criei uma tabela para receber esses carateres, nos respetivos formatos:

CREATE TABLE uni (
	utf32 CHAR(1) CHARACTER SET utf32,
	utf8 CHAR(1) CHARACTER SET utf8mb4
);

Utilizei o CHARSET utf8mb4, ao invés de utf8 apenas, pois o utf8 usa, no máximo, 3 bytes por caráter, enquanto que o utf8mb4 usa até 4 bytes. O utf8 suporta apenas os carateres do Basic Multilingual Plane (BMP). (ver mais)

Depois, era necessário converter os carateres utf32 (unicode codepoints) para utf8. Para isso, usei uma expressão que encontrei no StackOverflow.

>>> code = '01F600'
>>> c = ''.join(['{0:x}'.format(ord(x)) for x in unichr(int(code, 16)).encode('utf-8')]).upper()
F09F9880

Gastei algumas horas até chegar a este resultado. Mas, com esta solução, é possível inserir códigos dos emojis na tabela.

Deixe uma resposta

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