5

在 Python 中,我有一个 Unicode 编码的文本。此文本包含不间断空格,我想将其转换为“x”。不间断空格等于chr(160)。我有以下代码,当我使用 Localhost 通过 Eclipse 作为 Django 运行它时效果很好。没有错误和任何不间断的空格都会被转换。

my_text = u"hello"
my_new_text = my_text.replace(chr(160), "x")

但是,当我以任何其他方式运行它时(Python 命令行,Django 通过 runserver 而不是 Eclipse)我得到一个错误:

'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)

我想这个错误是有道理的,因为它试图将 Unicode (my_text) 与非 Unicode 的东西进行比较。我的问题是:

  1. 如果chr(160)不是 Unicode,那是什么?
  2. 当我从 Eclipse 运行它时,它是如何工作的?了解这一点将帮助我确定是否需要更改代码的其他部分。我一直在从 Eclipse 测试我的代码。
  3. (最重要)如何解决我原来的删除不间断空格的问题?my_text肯定会是Unicode。
4

1 回答 1

11
  1. 在 Python 2 中,chr(160)是长度为 1 的字节字符串,其唯一字节的值为 160,或十六进制 a0。除了特定编码的上下文之外,它没有任何意义。
  2. 我不熟悉 Eclipse,但它可能在玩自己的编码技巧。
  3. 如果你想要 Unicode 字符NO-BREAK SPACE,即代码点 160,那就是unichr(160).

例如,

>>> u"hello\u00a0world".replace(unichr(160), "X")
u'helloXworld
于 2012-07-11T16:17:16.347 回答