Deskripsi Singkat:
Mereka dirujuk secara internal sebagai goomoji
, dan tampaknya merupakan ekstensi UTF-8 non-standar. Saat Gmail menemukan salah satu karakter ini, itu diganti dengan ikon yang sesuai. Saya tidak dapat menemukan dokumentasi apa pun tentangnya, tetapi saya dapat merekayasa balik formatnya.
Apakah ikon-ikon ini?
Ikon tersebut sebenarnya adalah ikon yang muncul di bawah panel "Sisipkan emotikon".
Meskipun saya tidak melihat 52E
ikon di daftar, ada beberapa lainnya yang mengikuti konvensi yang sama.
Perhatikan bahwa ada juga beberapa ikon yang namanya diawali, seperti . Saya tidak dapat menentukan apakah atau bagaimana ikon ini dapat digunakan dengan cara ini.gtalk.03C
Apa URI Data ini?
Ini sebenarnya bukan URI Data , meskipun memiliki beberapa kesamaan. Ini sebenarnya adalah sintaks khusus untuk mengenkode karakter non-ASCII dalam subjek email, ditentukan dalam RFC 2047 . Pada dasarnya, cara kerjanya seperti ini.
=?charset?encoding?data?=
Jadi, dalam string contoh kami, kami memiliki data berikut.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(berarti base64)
data
= 876Urg==
Lantas, bagaimana cara kerjanya?
Kita tahu bahwa entah bagaimana 876Urg==
berarti ikon 52E
, tapi bagaimana caranya?
Jika kita decode base64 876Urg==
, kita dapatkan 0xf3be94ae
. Ini terlihat seperti berikut dalam biner:
11110011 10111110 10010100 10101110
Bit ini konsisten dengan karakter yang dikodekan UTF-8 4-byte.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Jadi bit yang relevan adalah sebagai berikut:
011 111110 010100 101110
Atau saat disejajarkan:
00001111 11100101 00101110
Dalam heksadesimal, byte ini adalah sebagai berikut:
FE52E
Seperti yang Anda lihat, kecuali untuk FE
awalan yang mungkin untuk membedakan goomoji
ikon dari karakter UTF-8 lainnya, itu cocok dengan 52E
di URL ikon. Beberapa pengujian membuktikan bahwa hal ini berlaku untuk ikon lainnya.
Kedengarannya banyak pekerjaan, apakah ada konverter ?:
Ini tentu saja bisa dibuat skrip. Saya membuat kode Python berikut untuk pengujian saya. Fungsi ini dapat mengonversi string yang disandikan base64 ke dan dari string heksa pendek yang ditemukan di URL. Perhatikan, kode ini ditulis untuk Python 3, dan tidak kompatibel dengan Python 2.
Fungsi konversi:
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')
Contoh:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Keluaran:
52E
876Urg==
Dan, tentu saja, menemukan URL ikon hanya perlu membuat draf baru di Gmail, memasukkan ikon yang Anda inginkan, dan menggunakan pemeriksa DOM browser Anda.