Python:以字节为单位获取字符串的大小

Iff*_*ima 51 python

我有一个要通过网络发送的字符串.我需要检查它所代表的总字节数.

sys.getsizeof(string_name)返回额外的字节.例如,对于sys.getsizeof("a")返回22,而一个字符仅在python中以1个字节表示.还有其他方法可以找到这个吗?

Kri*_*ris 85

如果你想要一个字符串中的字节数,这个函数应该非常稳固地为你做.

def utf8len(s):
    return len(s.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

你得到奇怪数字的原因是因为字符串是python中的实际对象,因此封装在字符串中是一堆其他信息.

它很有趣,因为如果你看看我的解决方案将字符串编码为'utf-8','s'对象上有一个'encode'方法(这是一个字符串).那么,它需要存储在某个地方吗?因此,高于正常的字节数.它包括那个方法,以及其他一些:).

  • 编码的原因是,在Python 3中,一些单字符字符串将需要表示多个字节.例如:`len('你'.encode('utf-8'))`. (11认同)
  • 为什么我们首先需要utf-8编码? (6认同)
  • 不会编码导致某些输入错误? (3认同)

sbo*_*oby 6

需要接受的答案有一个警告。

对于某些多字节编码(例如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
Run Code Online (Sandbox Code Playgroud)