为什么python2使用编码转义字符保存文本?

时间:2013-06-13 07:39:34

标签: python python-2.7 encoding

脚本读取包含我的复制粘贴文本的文件。它对文本数据进行一些操作并返回结果。 但是当python读取文件时,它会将其保存在带有单引号的变量中,而其他一些字符编码如:\xe2\x80\x99\xe2\x80\x9\xe2\x80\x99等等。 仅当我从网页复制粘贴文本时才会发生这种情况。如果我在文件中键入相同的文本并在之后读取该文件,则单引号和其他字符不会使用特殊字符进行转义。

文件名是'text.txt'。我用一个编辑器打开它,默认情况下将所有内容保存在utf-8中。我打开一个新闻网页(例如:http://www.euronews.com/2013/05/31/why-it-s-not-so-great-in-britain/)并将文本复制到'text.txt'文件中。之后:file=open('text.txt', 'r').read()并在python2控制台中点击file

In [62]: file=open('text.txt', 'r').read()

In [63]: file
Out[63]: 'Britain\xe2\x80\x99s generous system... David Cameron:\xe2\x80\x9c What we can do is make sure...they\xe2\x80\x99re drawn by the attractiveness...\xe2\x80\x9d'

1)你能解释一下这种行为吗?

2)如何在没有转义字符的情况下对复制的文本进行python读取?

2 个答案:

答案 0 :(得分:3)

In [1]: text = 'perchè'

In [2]: text
Out[2]: 'perch\xc3\xa8'

In [3]: print text
perchè

当您评估ipython调用其repr方法时。字符串的repr方法显示转义而不是实际字符。这是你真正想要的,因为它避免了stdout编码的问题,并且还允许你看到字符串中实际存在的字符(想想unicode获取相同字符的多种方式)。

要查看真实字符,您应该将字符串写入stdout(假设stdout可以处理字符串的编码等。)

答案 1 :(得分:0)

由于某种原因, euronews.net 网页文字似乎以这种方式显示。当我从任何其他网站复制带引号的任何文字时,我只有简单的don\'t转义。