我有一个与python(IPython notebook)中的编码问题有关的问题。由于这类问题非常普遍和简单,但我仍然无法真正解决它。
我在这里有一个CSV文件,如您所见,该文件中有很多'\ xa0'和其他'\ n'字符。
我用了
with io.open(train_fname) as f:
for line in f:
line = line.encode("ascii", "replace")
但是它不起作用,我总是得到以下输出。
想象一下,您可以说,您知道什么,没有制裁,就IEAA法规没有永远的听证会,没有更多隐藏\ xa0under \ xa0友好核能的幌子。\ xa0您有2天的时间;\ xa0i.e。\ xa0let在检查人员中,退出了杀死平民的行列。
我尝试了其他方法,例如
line.replace(u"\xa0", " ")
它也不起作用,我还尝试了各种编码来在我的文本编辑(崇高的文本)中打开此CSV文件。我尝试了Windows-1252,utf-8和所有其他编码,但是在查看此CSV文件时,我总是得到\ xa0是我的文本编辑。
这是否意味着
\ xa0
已经作为输入文本写在此CSV文件中了吗?这不是python编码的问题吗?如果是这种情况,为什么我不能使用replace方法简单地替换此字符串?\ xa0表示文件正在使用哪种编码进行编码?这意味着此文件是用utf-8编写的,但是我试图以ascii或其他方式打开它?
我搜索了许多问题,但它们似乎并没有提供太多帮助。如果我的问题不是很清楚,请问我。非常感谢你!
`
在\xa0
你看到的是4个字符的序列:\
x
a
0
。所有这些字符都是纯ASCII,因此这里没有字符集问题。
显然,您应该解释这些转义序列。您想用空格代替它们的想法很好,但是您必须注意反斜杠字符。当它出现在字符串文字中时,必须编写它\\
。因此,请尝试以下操作:
line.replace("\\xa0", " ")
或者:
line.replace(r"\xa0", " ")
在r
在前面的字符串意味着字面解释每个字符,甚至反斜杠。
请注意,CSV文件中的数据充满了不一致之处。例子:
\n
可能意味着换行。\\n
也出现了,这也可能意味着换行。\xa0
是一个不间断的空间,以ISO-8859-1编码。\xc2\xa0
是一个不间断的空间,以UTF-8编码。\\xc2\\xa0
也出现,含义相同。\\\\n
也出现。因此,要从该文件中获取有意义的内容,您应该重复解释转义序列,直到没有任何变化为止。之后,尝试将生成的字节序列解释为UTF-8。如果行得通,那就好。如果不是,则将其解释为Codepage 1252(是ISO-8859-1的超集)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句