我有一个字符串需要通过网络发送。 我需要检查它所占用的总字节数。
sys.getsizeof(string_name)
返回额外的字节。 例如,对于sys.getsizeof("a")
返回22,而在python中一字符只占1个字节。 是否有其他方法可以找到这个结果?
我有一个字符串需要通过网络发送。 我需要检查它所占用的总字节数。
sys.getsizeof(string_name)
返回额外的字节。 例如,对于sys.getsizeof("a")
返回22,而在python中一字符只占1个字节。 是否有其他方法可以找到这个结果?
def utf8len(s):
return len(s.encode('utf-8'))
你得到奇怪的数字的原因是因为在一个字符串中封装了许多其他信息,这是因为在Python中字符串是实际对象。
有趣的是,如果你看我的解决方案将字符串编码为“utf-8”,'s'对象(即字符串)上有一个'encode'方法。嗯,它需要被存储在某个地方,对吧?因此,字节数比正常情况要高。它包括了那个方法,以及其他一些方法 :).
len('你'.encode('utf-8'))
。 - Brad Solomon对于所接受的答案,有一个需要注意的地方。
对于一些多字节编码(例如utf-16),string.encode
在开头会添加一个字节顺序标记 (BOM),这是一系列特殊的字节序列,用于通知读者使用的字节序。因此,您获得的长度实际上是 len(BOM) + len(encoded_word)
。
如果您不想计算 BOM 字节,请使用编码的小端版本(在后缀中添加 "-le")或大端版本(在后缀中添加 "be")。
>>> len('ciao'.encode('utf-16'))
10
>>> len('ciao'.encode('utf-16-le'))
8