7

我有一个编码为 Unicode 的韩语字符串,例如u'정정'. 我怎么知道表示这个字符串需要多少字节?

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

len('정정')不起作用,因为它返回字符数,而不是字节数。

4

3 回答 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 对象和它的字节编码之间的区别。

另一篇优秀的文章是Joel Spolsky(Stack Overflow 背后的人之一)的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses! )。

于 2012-08-06T17:17:43.510 回答
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并稍后重用已编码的结果。

于 2012-08-06T17:17:38.163 回答
0

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

如果你不是,你总是可以decodedString = myString.decode('UTF-8')(用你可以从上一个链接中找到的正确编码字符串替换 UTF-8,如果不是 UTF-8)以len(decodedString)应该返回正确数字的格式获取字符串

于 2012-08-06T17:17:40.213 回答