获取Unicode字符串所需的字节数

7

我有一个以Unicode编码的韩文字符串,例如u'정정'。如何知道表示此字符串所需的字节数?

我需要知道确切的字节计数,因为我将在iOS推送通知中使用该字符串,并且它对负载大小有限制。

len('정정')无法工作,因为它返回的是字符数而不是字节数。

3个回答

14
你需要知道你想要以什么编码来测量字节大小:
>>> print u'\uC815\uC815'
정정
>>> print len(u'\uC815\uC815')
2
>>> print len(u'\uC815\uC815'.encode('UTF-8'))
6
>>> print len(u'\uC815\uC815'.encode('UTF-16-LE'))
4
>>> print len(u'\uC815\uC815'.encode('UTF-16'))
6
>>> print len(u'\uC815\uC815'.encode('UTF-32-LE'))
8
>>> print len(u'\uC815\uC815'.encode('UTF-32'))
12

您真的希望查看Python Unicode HOWTO,以充分了解unicode对象和它的字节编码之间的区别。

另一篇优秀的文章是绝对每个软件开发人员都必须了解的Unicode和字符集最低限度(没有借口!),作者是Joel Spolsky(Stack Overflow背后的人之一)。


你是怎么知道这个字符是'\uC815'的?它使用的是什么编码?我尝试了utf-8/16/32,但都不正确,但'\uC815'似乎可以工作。 - jasondinh
我有一个叫做UnicodeChecker的应用程序,我用它作为参考,但C815是Unicode代码点。如果您知道UTF-8或UTF-16字节序列,则可以从中解码以获取Unicode字符('\xEC\xA0\x95'.decode('UTF-8'))。Python提示符在这里非常有用;例如,当将Unicode值回显(而不是打印)到终端时,Python将使用其unicode_escape编码。 - Martijn Pieters

4

表示 unicode 所需的字节数取决于您使用的编码。

>>> s = u'정정'
>>> len(s)
2
>>> len(s.encode('UTF-8'))
6
>>> len(s.encode('UTF-16'))
6
>>> len(s.encode('UTF-32'))
12

如果您要重复使用编码结果,我建议先对其进行编码,然后提取其len并稍后重复使用已经编码的结果。

0

确保您正在使用正确的标准编码

如果不是,请始终使用decodedString = myString.decode('UTF-8')(如果不是UTF-8,则用从上一个链接中找到的正确编码字符串替换UTF-8)以获取以正确格式呈现的字符串,其中len(decodedString)应返回正确的数字


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