Python:替换Unicode中的不间断空格

时间:2012-07-11 16:12:49

标签: python unicode

在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。

1 个答案:

答案 0 :(得分:11)

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

    >>> u"hello\u00a0world".replace(unichr(160), "X")
    u'helloXworld