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

例如,

>>> u"hellou00a0world".replace(unichr(160), "X")
u'helloXworld

最新更新