【问题标题】:Get the number of bytes needed for a Unicode string获取 Unicode 字符串所需的字节数
【发布时间】:2012-08-06 17:11:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: python string unicode cjk


    【解决方案1】:

    你需要知道你想用什么编码来衡量你的字节大小:

    >>> 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 对象与其字节编码之间的区别。

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

    【讨论】:

    • 你怎么知道这个字符是'\uC815'?这是什么编码?我确实尝试了 utf-8/16/32,但没有一个是正确的,但 '\uC815' 似乎工作正常。
    • 我有一个名为 UnicodeChecker 的应用程序用作参考,但 C815 是 unicode 代码点。如果您知道 UTF-8 或 UTF-16 字节序列,则可以从中 decode 以获取 unicode 字符 ('\xEC\xA0\x95'.decode('UTF-8'))。 python 提示在这里很有帮助;例如,当向终端回显(不打印)unicode 值时,python 将使用它的unicode_escape 编码。
    【解决方案2】:

    表示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 并在以后重用已经编码的结果。

    【讨论】:

      【解决方案3】:

      确保您使用的是正确的standard encoding

      如果不是,您可以随时使用decodedString = myString.decode('UTF-8')(如果不是 UTF-8,则使用您可以从上一个链接中找到的正确编码字符串替换 UTF-8)来获取格式为 @987654323 的字符串@ 应该返回正确的数字

      【讨论】:

        猜你喜欢
        • 2021-07-31
        • 2011-05-13
        • 1970-01-01
        • 2012-04-08
        • 2012-04-21
        • 2018-08-15
        • 2021-03-30
        • 1970-01-01
        相关资源
        最近更新 更多