rev*_*evo 103 gmail base64 data-uri
我知道数据URI,其中base64
编码数据可以内联使用,如图像.今天我收到的电子邮件实际上是垃圾邮件,其主题中有一个动画(gif)图标:
这是仅图标:
因此,我唯一想到的就是关于数据URI以及Gmail是否允许在主题中插入某种表情符号.我看到了电子邮件的完整详细版本,并在下图中指出了主题行:
所以GIF来自=?UTF-8?B?876Urg==?=
编码字符串,类似于数据URI方案但是我无法从中获取图标.这是元素HTML源:
长话短说,有很多表情从https://mail.google.com/mail/e/XXX
哪里XXX
是十六进制数字.他们没有记录在案,或者我找不到它.如果这是关于数据URI,那么如何将它们包含在Gmail的电子邮件主题中呢?(我将该电子邮件转发到雅虎电子邮件帐户,[?]
而不是图标),如果不是,那么该编码字符串是如何解析的?
Ale*_*ara 173
它们在内部被称为goomoji
,它们似乎是非标准的UTF-8扩展.当Gmail遇到其中一个字符时,它会被相应的图标替换.我无法找到任何关于它们的文档,但我能够对格式进行反向工程.
这些图标实际上是"插入图释"面板下显示的图标.
虽然我没有52E
在列表中看到图标,但还有其他几个遵循相同的约定.
请注意,还有一些名称带有前缀的图标,例如 gtalk.03C
.我无法确定这些图标是否或如何以这种方式使用.
它实际上并不是一个数据URI,尽管它确实有一些相似之处.它实际上是一种特殊的语法,用于编码RFC 2047中定义的电子邮件主题中的非ASCII字符.基本上,它的工作原理如下.
=?charset?encoding?data?=
Run Code Online (Sandbox Code Playgroud)
因此,在我们的示例字符串中,我们有以下数据.
=?UTF-8?B?876Urg==?=
Run Code Online (Sandbox Code Playgroud)
charset
= UTF-8
encoding
= B
(表示base64)data
= 876Urg==
我们知道,不知何故,876Urg==
意味着图标52E
,但如何?
如果我们base64解码876Urg==
,我们得到0xf3be94ae
.这在二进制文件中如下所示:
11110011 10111110 10010100 10101110
Run Code Online (Sandbox Code Playgroud)
这些位与4字节UTF-8编码字符一致.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Run Code Online (Sandbox Code Playgroud)
所以相关位如下:
011 111110 010100 101110
Run Code Online (Sandbox Code Playgroud)
或者在对齐时:
00001111 11100101 00101110
Run Code Online (Sandbox Code Playgroud)
在十六进制中,这些字节如下:
FE52E
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,除了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')
Run Code Online (Sandbox Code Playgroud)
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Run Code Online (Sandbox Code Playgroud)
52E
876Urg==
Run Code Online (Sandbox Code Playgroud)
当然,找到图标的网址只需要在Gmail中创建新草稿,插入所需的图标,并使用浏览器的DOM检查器.
luk*_*keA 18
如果您使用正确的十六进制代码点(例如fe4f4用于'poo poo')并且如果它在主题行标题中正确编码,则让它为base64(请参阅@AlexanderOMara)或quoted-printable(=?utf-8?Q?=F3=BE=93=B4?=
),然后Gmail将自动解析并用相应的表情符号替换它.
这是一个Gmail表情符号列表,用于复制和粘贴到主题行 - 或电子邮件正文.动画表情符号会在收件箱中获得更多关注,它们被放置在黄色背景上:
归档时间: |
|
查看次数: |
27401 次 |
最近记录: |