2017-04-22 65 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个额外的报价位置会被计算在内。