5
在Python中,我有一個Unicode編碼的文本。這個文本包含了不間斷的空格,我想將它轉換爲'x'。非中斷空格等於chr(160)
。我有以下代碼,當我使用Localhost通過Eclipse將它作爲Django運行時,它非常適用。沒有錯誤和任何不間斷的空間被轉換。Python:替換Unicode中的不間斷空格
my_text = u"hello"
my_new_text = my_text.replace(chr(160), "x")
然而,當我運行任何其他方式(通過的runserver而不是Eclipse的Python的命令行,Django的)我得到一個錯誤:
'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。
完美,謝謝。 unichr()既可以通過Eclipse工作,也可以不通過Eclipse工作。奇怪的是,從Eclipse運行時,chr()和unichr()會給出相同的結果。 – user984003 2012-07-11 16:56:08
您的Eclipse配置可能會將默認編碼更改爲UTF8而不是ASCII。不建議這樣做,因爲現在應該有明顯的兼容性原因。以該配置編寫的代碼可能無法在別處工作。 – 2012-07-11 23:44:24
實際上,ASCII(0x00至0x7F)與UTF-8兼容,因爲UTF-8的前128個碼點與ASCII碼相同。但是,0xa0絕對不是ASCII,因此在使用'chr'而不是'unichr'時出錯。 – dda 2012-07-12 13:14:25