我有一个与 python 中的编码问题相关的问题(IPython笔记本)。由于此类问题非常常见且简单,但我仍然无法真正解决它。
我有一个CSV http://www.montefiore.ulg.ac.be/~glouppe/2012-2013/challenge/train.csv文件在这里,正如您所看到的,我们在该文件中有许多 '\xa0' 和其他 '\n' 字符。
I used
with io.open(train_fname) as f:
for line in f:
line = line.encode("ascii", "replace")
但它不起作用,我总是得到以下输出。
想象一下,你知道吗,没有制裁,没有关于 IEAA 法规的永久听证会,不再隐藏在友好核能的幌子下。 \xa0你有 2 天的时间; \xa0即\xa0让检查人员停止杀害平民。
我尝试了其他方法,例如
line.replace(u"\xa0", " ")
它也不起作用,我还尝试了各种编码在我的文本编辑 sublime text 中打开这个 CSV 文件。
我尝试了 windows-1252、utf-8 和所有其他编码,但在查看此 CSV 文件时,我总是得到 \xa0 是我的文本编辑。
这是否意味着
\xa0
已作为输入文本写入此 CSV 文件中?是不是python编码的问题?如果是这种情况,为什么我不能使用replace方法来简单地替换这个字符串? \xa0 表示文件采用哪种编码?这意味着这个文件是用 utf-8 编写的,但我尝试以 ascii 或其他情况打开它?
我搜索了很多问题,但它们似乎没有提供太多帮助。如果我的问题不是很清楚,请问我。
非常感谢!
`
The \xa0
您看到的是 4 个字符的序列:\
x
a
0
。所有这些字符都是纯 ASCII,因此这里不存在字符集问题。
显然,您应该解释这些转义序列。用空格替换它们的想法很好,但必须小心反斜杠字符。当它出现在字符串文字中时,必须写成\\
。所以试试这个:
line.replace("\\xa0", " ")
or:
line.replace(r"\xa0", " ")
The r
字符串前面的意思是按字面意思解释每个字符,甚至是反斜杠。
请注意,CSV 文件中的数据充满了不一致之处。例子:
-
\n
可能意味着换行。
-
\\n
也会出现,并且可能也意味着换行。
-
\xa0
是一个不间断空格,以 ISO-8859-1 编码。
-
\xc2\xa0
是一个不间断空格,以 UTF-8 编码。
-
\\xc2\\xa0
也出现,具有相同的含义。
-
\\\\n
也出现。
因此,要从该文件中获取有意义的内容,您应该重复解释转义序列,直到没有任何变化。之后,尝试将生成的字节序列解释为 UTF-8。如果有效的话,很好。如果不是,请将其解释为代码页 1252(它是 ISO-8859-1 的超集)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)