提问人:Richard Knop 提问时间:10/25/2010 更新时间:6/30/2017 访问量:100865
一个字符串有多少个字节
How many bytes does a string have
答:
68赞
eumiro
10/25/2010
#1
import sys
sys.getsizeof(s)
# getsizeof(object, default) -> int
# Return the size of object in bytes.
但实际上你需要知道它所代表的长度,所以这样的东西应该就足够了。len(s)
评论
5赞
Noufal Ibrahim
10/25/2010
+1 表示功能。这难道不会归还所有额外的行李来代表对象吗?PyObject 中的其余字段。
6赞
eumiro
10/25/2010
@Noufal - 没错。对于简单的“a”字符串,它返回 41。
2赞
tzot
10/26/2010
我的“a”需要 25 个字节;因此,要么您运行 64 位 Python,要么我使用的字体具有更简单的笔画:)
9赞
John Machin
10/26/2010
暂时忽略与 OP 的问题完全无关:25 或 41 的大小是无稽之谈; 朋友通常会分配大小是 where 的倍数的内存块,肯定大于 1,并且其中一些块被 malloc 开销占用,并且不允许任何这些(因为它不知道 malloc 实现的任何细节)。sys.getsizeof()
malloc()
2 ** n
n
sys.getsizeof()
4赞
Brōtsyorfuzthrāx
9/16/2014
len(s)
Unicode 是不够的,因为许多字符占用多个字节。请参阅 tzot 的答案(使用 Unicode 时首先转换为字节)。
101赞
tzot
10/25/2010
#2
如果是 Python 2.x ,则获取其 .如果是 Python 3.x(或 Python 2.x),则首先使用首选编码( 是一个不错的选择)编码为(或分别为 ),然后获取编码的字节/str 对象。str
len
str
unicode
bytes
str
'utf-8'
len
例如,ASCII 字符每个使用 1 个字节:
>>> len("hello".encode("utf8"))
5
而中文的则每个使用 3 个字节:
>>> len("你好".encode("utf8"))
6
评论
12赞
Tom
2/17/2016
事实上,这是正确的答案。这并不能给你你想要的。所以,如果你有一个 utf-8 编码的字符串,而不是说 ,就说sys.getsizeof()
len(myString)
len(myString.encode("utf8"))
2赞
Taywee
11/29/2016
这应该是正确的答案。它会准确地告诉你字符串需要多少字节,无论是否是 unicode。无论如何,字符串很有可能被编码为字节进行传输,所以我怀疑甚至会不会对性能造成影响。
评论