我有我的程序的一個功能,用戶可以上傳一個csv文件,我的程序經過並用作輸入。我有一位用戶抱怨他的輸入引發了錯誤。錯誤是由於存在編碼錯誤的非法字符引起的。字符如下:如何徹底清理python中的非法字符字符串?
�
有時它看起來像一個帶「?」的鑽石,在中間。有時它看起來像是一個雙「鑽石」,「?」在中間,有時顯示爲「\ xa0」,有時顯示爲「\ xa0 \ xa0」。
在我的計劃,如果我做的:
print str_with_weird_char
的striong將我與鑽石終端顯示「?」取代怪異的角色。如果我複製+粘貼串入IPython中,它會與此消息退出:
In [1]: g="blah��blah"
WARNING:
********
You or a %run:ed script called sys.stdin.close() or sys.stdout.close()!
Exiting IPython!
通知如何鑽石「?」現在是兩倍。出於某種原因,複製粘貼+使得它一倍...
在Django的追蹤頁面,它看起來像這樣:
UnicodeDecodeError at /chris/import.html
('ascii', 'blah \xa0 BLAH', 14, 15, 'ordinal not in range(128)')
是弄亂我的事情是,我不能這樣做任何事沒有它的字符串會引起異常。我試過unicode(),我試過str(),我試過.encode(),我試過.encode(「utf-8」),無論它拋出什麼錯誤。
我能做些什麼得到這個東西是一個工作的字符串?
順便說一句,你「無法做任何事」的原因可能是因爲你嘗試的所有事情都涉及在提示符下鍵入表達式。交互式解釋器通過調用repr()來顯示每個表達式的結果。有時候會導致解碼錯誤,因爲您的控制檯不處理Unicode(或其他原因?)。如果你得到這樣的東西,嘗試將它分配給一個虛擬名稱(例如「x = foo」而不是「foo」),並且通常不會顯示異常。那麼你知道這個例外是虛假的。 –