【问题标题】:Character count of Unicode string [duplicate]Unicode字符串的字符数[重复]
【发布时间】:2015-03-25 10:51:54
【问题描述】:

如何在 python 中获取以下字符数?

s = 'הוא אוסף אתכם מחר בשלוש וחצי.'

Char count: 29
Char length: 52

len(s) = 52
? = 29

【问题讨论】:

    标签: python unicode


    【解决方案1】:

    decode 你的字节字符串(根据它的任何编码,可能是 utf-8) -- 生成的 Unicode 字符串的 len 就是你所追求的。

    如果事实最佳做法是尽快解码输入,则处理实际文本(即,unicode,在 Python 2 中;这只是普通字符串的方式,在 Python 3 中) 在您的代码中,如果需要 encode,就像您再次输出一样。

    只有当字节字符串专门与字节字符串相关时(例如,控制或监视某些硬件设备等),才应在程序中处理字节字符串——更多的程序是关于文本的,因此,除非在某些 I/O 中必不可少边界,它们应该专门处理 text 字符串(在 Python 2 中拼写为 unicode:-)。

    但如果您确实想将s 保留为字节串,

    len(s.decode('utf-8'))
    

    (或您用来将文本表示为字节字符串的任何其他编码)仍应满足您的要求。

    【讨论】:

      【解决方案2】:

      使用 unicode 字符串

          s = 'הוא אוסף אתכם מחר בשלוש וחצי.'
          len(s) #52
          s = u'הוא אוסף אתכם מחר בשלוש וחצי.'
          len(s) #29
      

      【讨论】:

      • 我收到Unsupported characters in input
      • 也许是 Python 2 的东西?
      • @MalikBrahimi 和 Bjorn,所以你们两个在源代码或交互式解释器或 IDE 或其他任何东西中使用不同的编码 - 显然,Python 2 默认编码 ascii 上都没有,所以你可能想检查:-)
      • 我正在使用 IDLE,有什么方法可以更改编码。
      • @MalikBrahimi:请参阅Where does this come from: -*- coding: utf-8 -*- 并尝试将其添加到脚本的顶部。我不确定 IDLE 是否尊重这一点……但它应该这样做。
      猜你喜欢
      • 2020-02-14
      • 2012-05-03
      • 1970-01-01
      • 2016-07-23
      • 2013-05-27
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多