संक्षिप्त वर्णन:
उन्हें आंतरिक रूप से संदर्भित किया जाता है goomoji
, और वे एक गैर-मानक UTF-8 एक्सटेंशन प्रतीत होते हैं। जब जीमेल इनमें से किसी एक अक्षर का सामना करता है, तो इसे संबंधित आइकन से बदल दिया जाता है। मैं उन पर कोई दस्तावेज नहीं ढूंढ पा रहा था, लेकिन मैं प्रारूप को रिवर्स करने में सक्षम था।
ये चिह्न क्या हैं?
वे चिह्न वास्तव में प्रतीक हैं जो "इंसर्ट इमोटिकॉन्स" पैनल के तहत दिखाई देते हैं।
जबकि मैं 52E
सूची में आइकन नहीं देख रहा हूं , कई अन्य हैं जो समान सम्मेलन का पालन करते हैं।
ध्यान दें कि कुछ आइकन भी हैं जिनके नाम उपसर्ग हैं, जैसे कि । मैं यह निर्धारित करने में सक्षम नहीं था कि इन आइकनों का इस तरीके से उपयोग किया जा सकता है या नहीं।gtalk.03C
क्या है ये डेटा URI?
यह वास्तव में एक डेटा यूआरआई नहीं है , हालांकि यह कुछ समानताएं साझा करता है। यह वास्तव में RFC 2047 में परिभाषित ईमेल विषयों में गैर-ASCII वर्णों को एन्कोडिंग करने के लिए एक विशेष वाक्यविन्यास है । असल में, यह इस तरह काम करता है।
=?charset?encoding?data?=
तो, हमारे उदाहरण स्ट्रिंग में, हमारे पास निम्न डेटा है।
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(बेस 64 का अर्थ है)
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 में मेल खाता है । कुछ परीक्षण साबित करते हैं कि यह अन्य आइकन के लिए सही है।
बहुत काम की तरह लगता है, क्या कोई कन्वर्टर है? ”
यह निश्चित रूप से स्क्रिप्टेड हो सकता है। मैंने अपने परीक्षण के लिए निम्नलिखित पायथन कोड बनाया। ये फ़ंक्शंस बेस 64 एनकोडेड स्ट्रिंग को यूआरएल में पाए जाने वाले शॉर्ट हेक्स स्ट्रिंग से और उससे बदल सकते हैं। ध्यान दें, यह कोड पायथन 3 के लिए लिखा गया है, और पायथन 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 को खोजने के लिए बस जीमेल में एक नया ड्राफ्ट तैयार करना होता है, जो आइकन आप चाहते हैं, और अपने ब्राउज़र के DOM इंस्पेक्टर का उपयोग कर सकते हैं।