【发布时间】: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
使用 Python 3.4,假设我有一些来自文件的数据,它实际上是 6 个单独的字符 \u 0 0 C 0,但我需要将其转换为单个 unicode 字符 \u00C0。有没有一种简单的方法来进行这种转换?我在 Python 3.4 Unicode 文档中找不到任何似乎提供这种转换的东西,除了使用赋值语句的 exec() 的复杂方式,我想尽可能避免这种方式。
谢谢。
【问题讨论】:
标签: unicode python-3.4
嗯,有:
>>> 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。
【讨论】:
unicode-escape 做 做 \xc0、\n 和 \\.
unicode-escape 编解码器的行为自 Py2 引入以来发生了变化。我会改写答案。