簡體   English   中英

在python 3中將表情符號轉換為Unicode,反之亦然

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM