Mô tả ngắn:
Chúng được gọi nội bộ là goomoji
, và chúng dường như là một phần mở rộng UTF-8 không chuẩn. Khi Gmail gặp một trong các ký tự này, nó sẽ được thay thế bằng biểu tượng tương ứng. Tôi không thể tìm thấy bất kỳ tài liệu nào về chúng, nhưng tôi đã có thể thiết kế ngược lại định dạng.
Những biểu tượng này là gì?
Những biểu tượng đó thực sự là những biểu tượng xuất hiện trong bảng "Chèn biểu tượng cảm xúc".
Mặc dù tôi không thấy 52E
biểu tượng trong danh sách, nhưng có một số biểu tượng khác tuân theo quy ước tương tự.
Lưu ý rằng cũng có một số biểu tượng có tên được đặt trước, chẳng hạn như . Tôi không thể xác định liệu các biểu tượng này có thể được sử dụng theo cách này hay không.gtalk.03C
Điều này URI dữ liệu là gì?
Nó không thực sự là một URI dữ liệu , mặc dù nó có một số điểm tương đồng. Nó thực sự là một cú pháp đặc biệt để mã hóa các ký tự không phải ASCII trong các chủ đề email, được định nghĩa trong RFC 2047 . Về cơ bản, nó hoạt động như thế này.
=?charset?encoding?data?=
Vì vậy, trong chuỗi ví dụ của chúng tôi, chúng tôi có dữ liệu sau.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(có nghĩa là base64)
data
= 876Urg==
Vì vậy, làm thế nào nó hoạt động?
Chúng tôi biết rằng bằng cách nào đó, 876Urg==
có nghĩa là biểu tượng 52E
, nhưng làm thế nào?
Nếu chúng tôi giải mã base64 876Urg==
, chúng tôi nhận được 0xf3be94ae
. Điều này trông giống như sau trong hệ nhị phân:
11110011 10111110 10010100 10101110
Các bit này phù hợp với một ký tự được mã hóa UTF-8 4 byte.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Vì vậy, các bit có liên quan như sau:
011 111110 010100 101110
Hoặc khi căn chỉnh:
00001111 11100101 00101110
Trong hệ thập lục phân, các byte này như sau:
FE52E
Như bạn có thể thấy, ngoại trừ FE
tiền tố được cho là để phân biệt các goomoji
biểu tượng với các ký tự UTF-8 khác, nó khớp với 52E
trong URL biểu tượng. Một số thử nghiệm chứng minh rằng điều này đúng với các biểu tượng khác.
Có vẻ như rất nhiều công việc, có công cụ chuyển đổi không ?:
Điều này tất nhiên có thể được viết theo kịch bản. Tôi đã tạo mã Python sau cho thử nghiệm của mình. Các hàm này có thể chuyển đổi chuỗi được mã hóa base64 thành và từ chuỗi hex ngắn được tìm thấy trong URL. Lưu ý, mã này được viết cho Python 3 và không tương thích với Python 2.
Các chức năng chuyển đổi:
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')
Ví dụ:
print(goomoji_decode('876Urg=='))
print(goomoji_encode('52E'))
Đầu ra:
52E
876Urg==
Và tất nhiên, việc tìm kiếm URL của biểu tượng chỉ cần tạo một bản nháp mới trong Gmail, chèn biểu tượng bạn muốn và sử dụng trình kiểm tra DOM của trình duyệt.