Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:替换Unicode中的不间断空格_Python_Unicode - Fatal编程技术网

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

Python:替换Unicode中的不间断空格,python,unicode,Python,Unicode,在Python中,我有一个Unicode编码的文本。此文本包含非中断空格,我想将其转换为“x”。不间断空格等于chr(160)。我有以下代码,当我使用Localhost通过Eclipse以Django的身份运行它时,这些代码非常有用。不会转换任何错误和任何非中断空格 my_text = u"hello" my_new_text = my_text.replace(chr(160), "x") 但是,当我以任何其他方式运行它(Python命令行,通过runserver而不是Eclipse运行Dj

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

my_text = u"hello"
my_new_text = my_text.replace(chr(160), "x")
但是,当我以任何其他方式运行它(Python命令行,通过runserver而不是Eclipse运行Django)时,我会得到一个错误:

'ascii' codec can't decode byte 0xa0 in position 0: ordinal not in range(128)
我想这个错误是有意义的,因为它试图将Unicode(我的文本)与非Unicode的内容进行比较。我的问题是:

  • 如果
    chr(160)
    不是Unicode,它是什么
  • 当我从Eclipse运行它时,它是如何工作的?了解这一点有助于我确定是否需要更改代码的其他部分。我一直在测试Eclipse中的代码
  • (最重要的)我如何解决移除非中断空间的原始问题
    my_text
    肯定是Unicode
  • 在Python 2中,
    chr(160)
    是一个长度为1的字节字符串,其唯一字节的值为160,或十六进制a0。除了在特定编码的上下文中,它没有任何意义
  • 我不熟悉Eclipse,但它可能在玩自己的编码把戏
  • 如果您想要Unicode字符
    不间断空格
    ,即代码点160,则为
    unichr(160)
  • 例如:


    太好了,谢谢。unichr()可以通过Eclipse工作,也可以不通过Eclipse工作。奇怪的是,当从Eclipse运行时,chr()和unichr()会给出相同的结果。您的Eclipse配置可能会将默认编码更改为UTF8而不是ASCII。这是不推荐的,因为现在应该是明显的兼容性原因。在该配置中编写的代码可能在其他地方不起作用。实际上,ASCII(0x00到0x7F)与UTF-8兼容,因为UTF-8的前128个代码点与ASCII相同。但是,0xa0肯定不是ASCII,因此使用
    chr
    而不是
    unichr
    时会出现错误。。。
    >>> u"hello\u00a0world".replace(unichr(160), "X")
    u'helloXworld