Breve descrizione:
Sono denominati internamente come goomoji
e sembrano essere un'estensione UTF-8 non standard. Quando Gmail incontra uno di questi personaggi, viene sostituito dall'icona corrispondente. Non sono riuscito a trovare alcuna documentazione su di essi, ma sono stato in grado di decodificare il formato.
Cosa sono queste icone?
Quelle icone sono in realtà le icone che appaiono sotto il pannello "Inserisci emoticon".
Anche se non vedo l' 52E
icona nell'elenco, ce ne sono molti altri che seguono la stessa convenzione.
Notare che ci sono anche alcune icone i cui nomi hanno un prefisso, come . Non sono stato in grado di determinare se o come queste icone possono essere utilizzate in questo modo.gtalk.03C
Cos'è questa cosa dell'URI dei dati?
In realtà non è un URI dati , sebbene condivida alcune somiglianze. In realtà è una sintassi speciale per la codifica di caratteri non ASCII negli oggetti delle email, definita nella RFC 2047 . Fondamentalmente, funziona così.
=?charset?encoding?data?=
Quindi, nella nostra stringa di esempio, abbiamo i seguenti dati.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(significa base64)
data
= 876Urg==
Quindi, come funziona?
Lo sappiamo in qualche modo, 876Urg==
significa l'icona 52E
, ma come?
Se decodifichiamo in base64 876Urg==
, otteniamo 0xf3be94ae
. Questo è simile al seguente in binario:
11110011 10111110 10010100 10101110
Questi bit sono coerenti con un carattere codificato UTF-8 a 4 byte.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Quindi i bit rilevanti sono i seguenti .:
011 111110 010100 101110
O quando allineato:
00001111 11100101 00101110
In esadecimale, questi byte sono i seguenti:
FE52E
Come puoi vedere, ad eccezione del FE
prefisso che presumibilmente serve a distinguere le goomoji
icone dagli altri caratteri UTF-8, corrisponde 52E
all'URL dell'icona. Alcuni test dimostrano che questo vale per altre icone.
Sembra un sacco di lavoro, esiste un convertitore ?:
Questo può ovviamente essere scritto. Ho creato il seguente codice Python per i miei test. Queste funzioni possono convertire la stringa codificata in base64 nella e dalla breve stringa esadecimale trovata nell'URL. Nota, questo codice è scritto per Python 3 e non è compatibile con Python 2.
Funzioni di conversione:
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')
Esempi:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Produzione:
52E
876Urg==
E, naturalmente, trovare l'URL di un'icona richiede semplicemente la creazione di una nuova bozza in Gmail, l'inserimento dell'icona desiderata e l'utilizzo dell'ispettore DOM del browser.