我有一个以Unicode编码的韩文字符串,例如u'정정'
。如何知道表示此字符串所需的字节数?
我需要知道确切的字节计数,因为我将在iOS推送通知中使用该字符串,并且它对负载大小有限制。
len('정정')
无法工作,因为它返回的是字符数而不是字节数。
>>> 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背后的人之一)。
表示 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
并稍后重复使用已经编码的结果。确保您正在使用正确的标准编码。
如果不是,请始终使用decodedString = myString.decode('UTF-8')
(如果不是UTF-8,则用从上一个链接中找到的正确编码字符串替换UTF-8)以获取以正确格式呈现的字符串,其中len(decodedString)
应返回正确的数字
C815
是Unicode代码点。如果您知道UTF-8或UTF-16字节序列,则可以从中解码以获取Unicode字符('\xEC\xA0\x95'.decode('UTF-8')
)。Python提示符在这里非常有用;例如,当将Unicode值回显(而不是打印)到终端时,Python将使用其unicode_escape
编码。 - Martijn Pieters