Короткий опис:
Вони називаються всередині як goomoji
, і вони здаються нестандартним розширенням UTF-8. Якщо Gmail стикається з одним із цих символів, він замінюється відповідним значком. Я не зміг знайти жодної документації на них, але я зміг змінити формат.
Що це за ікони?
Ці піктограми - це фактично значки, які відображаються на панелі "Вставити смайлики".
Поки я не бачу 52E
піктограми у списку, є кілька інших, які дотримуються тієї ж конвенції.
Зверніть увагу , що є також деякі іконки, імена яких починаються, наприклад . Я не зміг визначити, чи можна використовувати ці значки таким чином.gtalk.03C
Що це за URI даних?
Це насправді не URI даних , хоча він має деякі подібності. Насправді це спеціальний синтаксис для кодування символів, що не належать до ASCII, у темах електронної пошти, визначених у RFC 2047 . В основному, це працює так.
=?charset?encoding?data?=
Отже, у нашому прикладі рядка маємо такі дані.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(означає base64)
data
= 876Urg==
Отже, як це працює?
Ми знаємо, що якось 876Urg==
означає ікону 52E
, але як?
Якщо ми базуємо64 декодування 876Urg==
, отримуємо 0xf3be94ae
. Це виглядає так:
11110011 10111110 10010100 10101110
Ці біти узгоджуються з 4-байтним кодованим символом UTF-8.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Отже, відповідні біти наступні:
011 111110 010100 101110
Або при вирівнюванні:
00001111 11100101 00101110
У шістнадцятковому значенні ці байти:
FE52E
Як бачите, за винятком FE
префікса, який імовірно відрізняє goomoji
піктограми від інших символів UTF-8, він відповідає 52E
URL-адресі значка. Деякі тестування доводять, що це стосується інших значків.
Здається, багато роботи, чи є перетворювач ?:
Це, звичайно, можна прописати. Я створив наступний код Python для мого тестування. Ці функції можуть перетворити кодовану рядок base64 в короткий шістнадцятковий рядок, знайдений в URL-адресі. Зауважте, цей код написаний для Python 3, і не сумісний із Python 2.
Функції перетворення:
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')
Приклади:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Вихід:
52E
876Urg==
І, звичайно, для пошуку URL-адреси піктограми просто потрібно створити нову чернетку в Gmail, вставити потрібний значок та за допомогою інспектора DOM вашого браузера.