【问题标题】:python u'\u00b0' returns u'\xb0'. Why?python u'\u00b0' 返回 u'\xb0'。为什么?
【发布时间】:2016-09-22 15:00:00
【问题描述】:

我使用 python 2.7.10。

在处理字符编码时,在阅读了大量关于该主题的堆栈溢出等内容后,我遇到了这种对我来说看起来很奇怪的行为。 Python解释器输入

>>>u'\u00b0'

产生以下输出:

u'\xb0'

我可以使用 dos 窗口、空闲控制台和wing-ide python shell 重复此行为。

我的假设(如果我错了,请纠正我): “度数符号”有 unicode 0x00b0、utf-8 代码 0xc2b0、latin-1 代码 0xb0。 Python 文档说,带有 u 前缀的字符串文字是使用 unicode 编码的。

问题:为什么将结果转换为带有与 latin-1 编码匹配的字节转义序列的 unicode-string-literal,而不是保留 unicode 转义序列?

提前感谢您的帮助。

【问题讨论】:

    标签: python unicode character-encoding python-2.x string-literals


    【解决方案1】:

    Python 使用一些规则来确定每个字符从repr 输出的内容。 Unicode 字符代码点在 0x0080 到 0x00ff 范围内的规则是使用序列\xdd,其中dd 是十六进制代码,至少在 Python 2 中是这样。没有办法改变它。在 Python 3 中,所有可打印的字符都将显示而不转换为十六进制代码。

    至于为什么看起来像 Latin-1 编码,那是因为 Unicode 以 Latin-1 为基础开始的。直到 0xff 的所有代码点都与对应的 Latin-1 代码点匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      相关资源
      最近更新 更多