【问题标题】:Can't use unichr in Python 3.1不能在 Python 3.1 中使用 unichr
【发布时间】:2011-01-22 01:28:20
【问题描述】:

我一直在浏览 Python Cookbook(第 2 版),以了解如何处理字符串和字符。

我想尝试将数字转换为其 Unicode 等价物。所以我尝试使用built-in function called 'unichr',根据食谱,它类似于:

>>> print repr(unichr(8224))

...并将输出:

u'\u2020'

但是,代码失败了。我认为这与 print 有关(因为 Python 3 使用 print() 而不是 print""),但这也没有用。我尝试了代码的几种变体,但仍然失败。最后,我只是输入了一个简单的行:

unichr(10000)

令我惊讶的是,无论我在上面的函数中输入什么值,这个错误消息都会不断弹出:

 NameError: name 'unichr' is not defined

可能是什么问题?是否有一些我应该导入的特定模块?

【问题讨论】:

  • 提示:您可以而且应该在“代码失败”之后立即提及错误消息。始终注意 Python 给出的错误消息(以及 exact 错误消息,而不是来自记忆),并尽早提及。
  • 感谢您的建议,我一定会记住的。

标签: python unicode string


【解决方案1】:

正如this 所建议的那样,这是一种更好的方法,因为它同时兼容 2 和 3:

# Python 2 and 3:
from builtins import chr
assert chr(8364) == '€'

如果发生错误,您可能需要pip install future

【讨论】:

    【解决方案2】:

    在 Python 3 中,您只需使用 chr:

    >>> chr(10000)
    '✐'
    

    【讨论】:

      【解决方案3】:

      如果你需要在 python 2 和 python 3 中运行,你可以使用这个通用语法 (未使用的语法将指向新语法)

      try:
          unichr
      except NameError:
          unichr = chr
      

      【讨论】:

        【解决方案4】:

        在 Python 3 中,unicode 和普通字符串之间没有区别了。仅在 unicode 字符串和二进制数据之间。因此,开发人员最终删除了 unichr 函数,转而使用普通的 chr,它现在可以实现旧的 unichr 的功能。请参阅文档here

        【讨论】:

        • 还有两种字符串类型。 2.x 调用 unicode,3.x 调用 str(有一些细微的变化)。 2.x 调用str,3.x 调用bytes(有适度的变化)。
        【解决方案5】:

        Python 3.x 没有特殊的 Unicode 字符串类型/类。每个字符串都是一个 Unicode 字符串。所以...我会尝试chr。应该给你 unichr 在 3.x 之前所做的事情。无法测试,很遗憾。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-02-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-25
          • 1970-01-01
          • 2019-11-22
          • 1970-01-01
          相关资源
          最近更新 更多