【问题标题】:Unicode character creation in Python 3.4Python 3.4 中的 Unicode 字符创建
【发布时间】:2015-01-24 16:10:03
【问题描述】:

使用 Python 3.4,假设我有一些来自文件的数据,它实际上是 6 个单独的字符 \u 0 0 C 0,但我需要将其转换为单个 unicode 字符 \u00C0。有没有一种简单的方法来进行这种转换?我在 Python 3.4 Unicode 文档中找不到任何似乎提供这种转换的东西,除了使用赋值语句的 exec() 的复杂方式,我想尽可能避免这种方式。

谢谢。

【问题讨论】:

标签: unicode python-3.4


【解决方案1】:

嗯,有:

>>> b'\\u00C0'.decode('unicode-escape')
'À'

但是,unicode-escape 编解码器针对的是特定格式的字符串编码,即 Python 字符串文字。当遇到其他 Python 中特殊的转义序列时,它可能会产生意想不到的结果,例如\xC0\n\\\U000000C0,并且它可能无法识别来自其​​他字符串文字格式的其他转义序列。它还可能错误地处理基本多语言平面之外的字符(例如 JSON 会将 U+10000 编码为 surrogates\uD800\uDC00)。

因此,除非您的输入数据确实是一个没有引号分隔符的 Python 字符串文字,否则这不是正确的做法,并且可能会在某些边缘情况下产生不需要的结果。有很多格式使用\u 来表示Unicode 字符;您应该尝试找出它到底是什么格式,并为该方案使用解码器。例如,如果文件是 JSON,那么正确的做法是使用 JSON 解析器,而不是尝试自己处理 \u/\n/\\/etc。

【讨论】:

  • 我刚试过 Python 3.3 和 3.4 和 unicode-escape \xc0\n 和 \\.
  • @Mark:你说得对,unicode-escape 编解码器的行为自 Py2 引入以来发生了变化。我会改写答案。
  • 谢谢。这为我解决了。鉴于我的数据在变量 x 中,我可以使用 bytes(x,"utf-8").decode('unicode-escape') 并得到我所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2016-05-22
  • 2015-11-05
  • 2011-07-31
  • 2017-11-23
  • 2016-12-21
相关资源
最近更新 更多