如何使用Python获取UTF-8字符串的字节大小

9

如果有一个UTF-8字符串如下:

mystring = "işğüı"

在Python(2.5)中,是否可能获取其(内存中)大小(以字节为单位)?


当我执行 len(mystring) 时,我得到了9。 - NullUserException
如果将其转换为Unicode文字,您将得到5个 mystring = u"işğüı"。否则,它会变成 'i\xc5\x9f\xc4\x9f\xc3\xbc\xc4\xb1' - aaronasterling
这意味着对这样的字符串进行切片可能会得到非法字符。尝试使用 mystring[2:6]。我只是把它放在这里,因为我也感到惊讶。 - Muhammad Alkarouri
1个回答

7
假设你要求的是UTF-8字节数(而不是Python需要存储对象所需的额外字节),那么与任何其他字符串的长度相同。在Python 2.x中,字符串文字是编码字节的字符串,而不是Unicode字符。
字节串:
>>> mystring = "işğüı"
>>> print "length of {0} is {1}".format(repr(mystring), len(mystring))
length of 'i\xc5\x9f\xc4\x9f\xc3\xbc\xc4\xb1' is 9

Unicode字符串:

>>> myunicode = u"işğüı"
>>> print "length of {0} is {1}".format(repr(myunicode), len(myunicode))
length of u'i\u015f\u011f\xfc\u0131' is 5

在处理字符串时,最好将所有内容都保持为Unicode编码,在与外界通信时再进行编码转换。在这种情况下,您可以使用 len(myunicode.encode('utf-8')) 来查找编码后的大小。


4
这个答案是错误的。正确计算字符串中字节(八位组)的数量需要将编码后的字符串视为 utf8 字符,因为 utf8 字符的范围是 1 到 4 个字节。可使用以下方法:len(bytes(u'计算机', 'utf8')) # 返回 9 而不是 len(u'计算机') # 返回 3 - Karsten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接