[英]Converting emojis to Unicode and vice versa in python 3
我正在嘗試在 python 3 中將表情符號轉換為它的 Unicode。例如,我會有表情符號 😀 並且想從中獲得相應的 unicode 'U+1F600'。 同樣,我想將 'U+1F600' 轉換回😀。 現在我已經閱讀了文檔並嘗試了幾個選項,但是 python 的行為在這里讓我感到困惑。
>>> x = '😀'
>>> y = x.encode('utf-8')
>>> y
b'\xf0\x9f\x98\x80'
表情符號轉換為字節對象。
>>> z = y.decode('utf-8')
>>> z
'😀'
將字節對象轉換回表情符號,到目前為止一切順利。
現在,使用表情符號的 unicode:
>>> c = '\U0001F600'
>>> d = c.encode('utf-8')
>>> d
>>> b'\xf0\x9f\x98\x80'
這將再次打印出字節編碼。
>>> d.decode('utf-8')
>>> '😀'
這會再次打印出表情符號。 我真的不知道如何僅在 Unicode 和表情符號之間進行轉換。
'😀' 已經是一個 Unicode 對象。 UTF-8 不是 Unicode,它是 Unicode 的字節編碼。 要獲取 Unicode 字符的代碼點編號,可以使用ord
函數。 並以您想要的形式打印它,您可以將其格式化為十六進制。 像這樣:
s = '😀'
print('U+{:X}'.format(ord(s)))
輸出
U+1F600
如果你有 Python 3.6+,你可以使用 f-string 讓它更短(更高效):
s = '😀'
print(f'U+{ord(s):X}')
順便說一句,如果你想創建一個像'\\U0001F600'
這樣的 Unicode 轉義序列,有一個'unicode-escape'
編解碼器。 但是,它返回一個bytes
字符串,您可能希望將其轉換回文本。 您可以為此使用“UTF-8”編解碼器,但您也可以只使用“ASCII”編解碼器,因為它保證僅包含有效的 ASCII。
s = '😀'
print(s.encode('unicode-escape'))
print(s.encode('unicode-escape').decode('ASCII'))
輸出
b'\\U0001f600'
\U0001f600
我建議你看看 Stack Overflow 聯合創始人 Joel Spolsky 的這篇短文, 每個軟件開發人員絕對、肯定必須了解 Unicode 和字符集(沒有借口!)的絕對最小值。
sentence = "Head-Up Displays (HUD)💻 for #automotive🚗 sector\n \nThe #UK-based #startup🚀 Envisics got €42 million #funding💰 from l… "
print("normal sentence - ", sentence)
uc_sentence = sentence.encode('unicode-escape')
print("\n\nunicode represented sentence - ", uc_sentence)
decoded_sentence = uc_sentence.decode('unicode-escape')
print("\n\ndecoded sentence - ", decoded_sentence)
輸出
normal sentence - Head-Up Displays (HUD)💻 for #automotive🚗 sector
The #UK-based #startup🚀 Envisics got €42 million #funding💰 from l…
unicode represented sentence - b'Head-Up Displays (HUD)\\U0001f4bb for #automotive\\U0001f697 sector\\n \\nThe #UK-based #startup\\U0001f680 Envisics got \\u20ac42 million #funding\\U0001f4b0 from l\\u2026 '
decoded sentence - Head-Up Displays (HUD)💻 for #automotive🚗 sector
The #UK-based #startup🚀 Envisics got €42 million #funding💰 from l…
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.