Krótki opis:
Są one określane wewnętrznie jako goomoji
i wydają się być niestandardowym rozszerzeniem UTF-8. Gdy Gmail napotyka jeden z tych znaków, jest on zastępowany odpowiednią ikoną. Nie mogłem znaleźć na nich żadnej dokumentacji, ale udało mi się odtworzyć format.
Co to za ikony?
Te ikony to w rzeczywistości ikony wyświetlane w panelu „Wstaw emotikony”.
Chociaż nie widzę 52E
ikony na liście, jest kilka innych, które stosują tę samą konwencję.
Zwróć uwagę, że istnieją również ikony, których nazwy są poprzedzone, na przykład . Nie byłem w stanie określić, czy i jak te ikony można wykorzystać w ten sposób.gtalk.03C
Co to za identyfikator URI danych?
W rzeczywistości nie jest to identyfikator URI danych , chociaż ma pewne podobieństwa. W rzeczywistości jest to specjalna składnia do kodowania znaków spoza ASCII w tematach wiadomości e-mail, zdefiniowana w dokumencie RFC 2047 . Zasadniczo działa to w ten sposób.
=?charset?encoding?data?=
Tak więc w naszym przykładowym ciągu mamy następujące dane.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(oznacza base64)
data
= 876Urg==
Więc jak to działa?
Jakoś to wiemy, 876Urg==
oznacza ikonę 52E
, ale jak?
Jeśli zdekodujemy base64 876Urg==
, otrzymamy 0xf3be94ae
. W formacie binarnym wygląda to następująco:
11110011 10111110 10010100 10101110
Te bity są zgodne z 4-bajtowym znakiem zakodowanym w UTF-8.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Zatem odpowiednie bity są następujące .:
011 111110 010100 101110
Lub po wyrównaniu:
00001111 11100101 00101110
Szesnastkowo te bajty są następujące:
FE52E
Jak widać, z wyjątkiem FE
przedrostka, który przypuszczalnie ma odróżniać goomoji
ikony od innych znaków UTF-8, pasuje on 52E
do adresu URL ikony. Niektóre testy dowodzą, że dotyczy to innych ikon.
Brzmi jak dużo pracy, czy jest konwerter ?:
Można to oczywiście napisać. Stworzyłem następujący kod Pythona do moich testów. Te funkcje mogą konwertować ciąg zakodowany algorytmem base64 na iz krótkiego ciągu szesnastkowego znalezionego w adresie URL. Uwaga, ten kod jest napisany dla Pythona 3 i nie jest zgodny z Pythonem 2.
Funkcje konwersji:
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')
Przykłady:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Wynik:
52E
876Urg==
I oczywiście znalezienie adresu URL ikony wymaga po prostu utworzenia nowej wersji roboczej w Gmailu, wstawienia żądanej ikony i użycia inspektora DOM przeglądarki.