간단한 설명:
내부적으로라고하며 goomoji
비표준 UTF-8 확장으로 보입니다. Gmail에서 이러한 문자 중 하나를 발견하면 해당 아이콘으로 대체됩니다. 문서를 찾을 수 없었지만 형식을 리버스 엔지니어링 할 수있었습니다.
이 아이콘은 무엇입니까?
이러한 아이콘은 실제로 "이모티콘 삽입"패널 아래에 나타나는 아이콘입니다.
52E
목록에 아이콘 이 표시되지 않지만 동일한 규칙을 따르는 몇 가지 다른 아이콘이 있습니다.
같은 이름이 접두사로 붙은 아이콘도 있습니다 . 이러한 아이콘을 이러한 방식으로 사용할 수 있는지 여부를 결정할 수 없었습니다.gtalk.03C
이 데이터 URI는 무엇입니까?
일부 유사점을 공유하지만 실제로는 Data URI 가 아닙니다 . 실제로 RFC 2047에 정의 된 이메일 제목에서 ASCII가 아닌 문자를 인코딩하기위한 특수 구문입니다 . 기본적으로 이렇게 작동합니다.
=?charset?encoding?data?=
따라서 예제 문자열에는 다음 데이터가 있습니다.
=?UTF-8?B?876Urg==?=
charset
= UTF-8
encoding
= B
(base64를 의미)
data
= 876Urg==
그래서 어떻게 작동합니까?
우리는 어떻게 든 876Urg==
아이콘을 의미한다는 것을 알고 52E
있지만 어떻게?
base64 디코딩 876Urg==
하면 0xf3be94ae
. 바이너리에서 다음과 같이 보입니다.
11110011 10111110 10010100 10101110
이러한 비트는 4 바이트 UTF-8 인코딩 문자와 일치합니다.
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
따라서 관련 비트는 다음과 같습니다. :
011 111110 010100 101110
또는 정렬 된 경우 :
00001111 11100101 00101110
16 진수에서 이러한 바이트는 다음과 같습니다.
FE52E
보시다시피 다른 UTF-8 문자와 아이콘 FE
을 구별 하기위한 접두사를 제외하고 는 아이콘 URL의 goomoji
와 일치합니다 52E
. 일부 테스트는 이것이 다른 아이콘에도 적용된다는 것을 증명합니다.
많은 작업처럼 들리지만 변환기가 있습니까? :
물론 이것은 스크립트로 작성할 수 있습니다. 테스트를 위해 다음 Python 코드를 만들었습니다. 이러한 함수는 base64로 인코딩 된 문자열을 URL에있는 짧은 16 진수 문자열과 변환 할 수 있습니다. 이 코드는 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 검사기를 사용하면됩니다.