2017-04-22 31 views
2

我想了解不同的長度,我與相處了相同的Unicode字符的字節對象的意義!!!!!。我知道第一個長度(Len1)是我單個unicode字符串的ACTUAL長度,第二個長度(Len2)可能是單個Unicode字符佔據的字節總數,但其他剩餘長度是多少(Len3 & Len4)代表?我使用python 3如何解釋爲同一Unicode的不同長度在Python 3

MyStr = '✮' 
print(MyStr," Len1 = ", len(MyStr)) 
print(bytes(MyStr, 'utf-8'), Len2 = ", len(bytes(MyStr, 'utf-8'))) 
print(MyStr.encode('unicode_escape'), " Len3 = ", len(MyStr.encode('unicode_escape'))) 
print(ascii(MyStr), " Len4 = ", len(ascii(MyStr))) 

這裏是輸出..

✮ Len1 = 1 
b'\xe2\x9c\xae' Len2 = 3 
b'\\u272e' Len3 = 6 
'\u272e' Len4 = 8 
+1

我想你應該看看這篇文章通過這樣的聯合創始人:[(!沒有藉口)絕對最低每一個軟件開發人員絕對,積極必須知道的關於Unicode和字符集(https://www.joelonsoftware.com/ 2003/10/08 /的,絕對最低每一個軟件開發者,絕對-正必知 - 關於支持unicode和字符集,沒有藉口) –

+0

「第二長度(LEN2)可能是單個Unicode字符佔據的字節總數「,錯誤,實際上,當以UTF-8表示時,這是Unicode字節序列的長度(以字節爲單位)。 UTF-8只是存儲Unicode序列的許多方法之一(但現在是常用的一種)。 – Anthon

+0

@Anthon tbh您剛剛重新評估了OP的評估並添加了「以UTF-8」的形式。 – timgeb

回答

0

多久表示作爲一個特定的Unicode字符的字節,取決於你如何表示呢,性格是什麼,如果你計算報價或不。

你的字符「✮」需要三個字節被表示爲UTF-8字節流。當用UTF-8表示時,更常見的'*'只需要一個字節。

您的其他長度表示表示字符字符串有多長。由於該字符的順序可以被存儲在一個16位的值只有4的十六進制數都需要,加上用於逃生\u兩個位置使得6的長度。如果你把它變成一個字符串,那麼2個額外的報價位置會被計算在內。