在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进行比较。我的问题是:
- 如果
chr(160)
不是Unicode,它是什么 - 当我从Eclipse运行它时,这是如何工作的?了解这一点将帮助我确定是否需要更改代码的其他部分。我一直在测试Eclipse中的代码
- (最重要的)如何解决我最初的问题,即删除不间断空格?
my_text
肯定会是Unicode
- 在Python 2中,
chr(160)
是长度为1的字节字符串,其唯一字节的值为160,即十六进制a0。除了在特定编码的上下文中,它没有任何意义 - 我不熟悉Eclipse,但它可能在玩自己的编码技巧
- 如果您想要Unicode字符
NO-BREAK SPACE
,即代码点160,那就是unichr(160)
例如,
>>> u"hellou00a0world".replace(unichr(160), "X")
u'helloXworld