Brève description:
Ils sont appelés en interne goomoji
et semblent être une extension UTF-8 non standard. Lorsque Gmail rencontre l'un de ces personnages, il est remplacé par l'icône correspondante. Je n'ai pas pu trouver de documentation sur eux, mais j'ai pu procéder à une rétro-ingénierie du format.
Quelles sont ces icônes?
Ces icônes sont en fait les icônes qui apparaissent sous le panneau "Insérer des émoticônes".
Bien que je ne vois pas l' 52E
icône dans la liste, il y en a plusieurs autres qui suivent la même convention.
Notez qu'il existe également des icônes dont les noms sont préfixés, tels que . Je n'ai pas été en mesure de déterminer si ou comment ces icônes peuvent être utilisées de cette manière.gtalk.03C
Quelle est cette chose URI de données?
Ce n'est pas réellement un URI de données , bien qu'il partage certaines similitudes. Il s'agit en fait d'une syntaxe spéciale pour l'encodage de caractères non ASCII dans les sujets de courrier électronique, définie dans la RFC 2047 . En gros, ça marche comme ça.
=?charset?encoding?data?=
Ainsi, dans notre exemple de chaîne, nous avons les données suivantes.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(signifie base64)
data
= 876Urg==
Alors, comment ça marche?
Nous savons que d'une manière ou d'une autre 876Urg==
signifie l'icône 52E
, mais comment?
Si nous décodons en base64 876Urg==
, nous obtenons 0xf3be94ae
. Cela ressemble à ce qui suit en binaire:
11110011 10111110 10010100 10101110
Ces bits sont cohérents avec un caractère codé UTF-8 de 4 octets.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Les bits pertinents sont donc les suivants:
011 111110 010100 101110
Ou lorsqu'il est aligné:
00001111 11100101 00101110
En hexadécimal, ces octets sont les suivants:
FE52E
Comme vous pouvez le voir, à l'exception du FE
préfixe qui sert vraisemblablement à distinguer les goomoji
icônes des autres caractères UTF-8, il correspond 52E
à l'URL de l'icône. Certains tests prouvent que cela est vrai pour d'autres icônes.
Cela semble beaucoup de travail, y a-t-il un convertisseur?:
Cela peut bien sûr être scénarisé. J'ai créé le code Python suivant pour mes tests. Ces fonctions peuvent convertir la chaîne encodée en base64 vers et à partir de la chaîne hexadécimale courte trouvée dans l'URL. Notez que ce code est écrit pour Python 3 et n'est pas compatible avec Python 2.
Fonctions de conversion:
import base64
def goomoji_decode(code):
#Base64 decode.
binary = base64.b64decode(code)
#UTF-8 decode.
decoded = binary.decode('utf8')
#Get the UTF-8 value.
value = ord(decoded)
#Hex encode, trim the 'FE' prefix, and uppercase.
return format(value, 'x')[2:].upper()
def goomoji_encode(code):
#Add the 'FE' prefix and decode.
value = int('FE' + code, 16)
#Convert to UTF-8 character.
encoded = chr(value)
#Encode UTF-8 to binary.
binary = bytearray(encoded, 'utf8')
#Base64 encode return end return a UTF-8 string.
return base64.b64encode(binary).decode('utf-8')
Exemples:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Production:
52E
876Urg==
Et, bien sûr, pour trouver l'URL d'une icône, il suffit simplement de créer un nouveau brouillon dans Gmail, d'insérer l'icône de votre choix et d'utiliser l'inspecteur DOM de votre navigateur.