decode-encode UTF-8不会导致原始的unicode

Har*_*wee 2 python unicode encoding utf-8 decoding

当我试图通过再次解码和编码来分离两个Unicode字符时,我得不到相同的Unicode作为回报,但我得到一个不同的.

当我尝试这样做时,附上了回复.

>>> s ='\xf0\x9f\x93\xb1\xf0\x9f\x9a\xac'
>>> u = s.decode("utf-8")
>>> u
u'\U0001f4f1\U0001f6ac'
>>> u[0].encode("utf-8")
'\xed\xa0\xbd'
>>> u[1].encode("utf-8")
'\xed\xb3\xb1'
>>> u[0]
u'\ud83d'
>>> u[1]
u'\udcf1'
Run Code Online (Sandbox Code Playgroud)

jdi*_*tal 5

您的python版本使用的是UCS-2(每个字符16位),但这些特殊的unicode字符需要32位,因此u的元素代表字符的"一半". u.encode('utf-8')正常工作,因为它了解编码.

你的utf-8字符串对这两个字符进行编码:

U+1F4F1 MOBILE PHONE character (?)

U+1F6AC SMOKING SYMBOL character (?)

(通过这个解码器:http://software.hixie.ch/utilities/cgi/unicode-decoder/utf8-decoder)