我有我的程序的一个功能,用户可以上传一个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”),并且通常不会显示异常。那么你知道这个例外是虚假的。 –