我有一个要通过网络发送的字符串。我需要检查它所代表的总字节数。
sys.getsizeof(string_name)
返回额外的字节。例如,sys.getsizeof("a")
返回22,而一个字符仅在python中以1个字节表示。还有其他方法可以找到这个吗?
答案 0 :(得分:72)
如果你想要字符串中的字节数,这个函数应该非常稳固地为你做。
:)
你得到奇怪数字的原因是因为字符串是python中的实际对象,因此封装在字符串中是一堆其他信息。
这很有意思,因为如果你看一下我的解决方案,将字符串编码为&ut;#' utf-8',那就是'编码'关于'的方法对象(这是一个字符串)。那么,它需要存储在某个地方吗?因此,高于正常的字节数。它包括那种方法,以及其他一些方法:)。
答案 1 :(得分:1)
需要接受的答案有一个警告。
对于某些多字节编码(例如utf-16),string.encode
将在开头添加字节顺序标记(BOM),这是一序列特殊字节,可通知读者使用的byte endianness。因此,您得到的长度实际上是len(BOM) + len(encoded_word)
。
如果您不想计算BOM字节数,则可以使用编码的小端版本(添加后缀“ -le”)或大端版本(添加后缀“ be”)
>>> len('ciao'.encode('utf-16'))
10
>>> len('ciao'.encode('utf-16-le'))
8