如何摆脱python中的ascii编码错误

时间:2014-06-24 10:25:42

标签: python

string = "Deepika Padukone, Esha Gupta or Yami Gautam - Who's looks hotter and sexier? Vote! - It's ... Deepika Padukone, Esha Gupta or Yami Gautam…. Deepika Padukone, Esha Gupta or Yami Gautam ... Tag: Deepika Padukone, Esha Gupta, Kalki Koechlin, Rang De Basanti, Soha Ali Khan, Yami  ... Amitabh Bachchan and Deepika Padukone to be seen in Shoojit Sircar's Piku ..."

fp = open("test.txt", "w+");

fp.write("%s" %string);

运行上面的代码后,我遇到以下错误。

File "encode_error.py", line 1

SyntaxError: Non-ASCII character '\xe2' in file encode_error.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

2 个答案:

答案 0 :(得分:6)

字符串定义中有U+2026 HORIZONTAL ELLIPSIS个字符:

... Deepika Padukone, Esha Gupta or Yami Gautam…. ...
                                               ^

如果要在源代码中使用任何非ASCII字符,Python要求您声明源代码编码。

您的选择是:

  • 将编码声明为specified in the linked PEP 263。它是一个注释,必须是源文件的第一行或第二行。

    您将其设置为取决于您的代码编辑器。如果要保存编码为UTF-8的文件,则注释类似于:

    # coding: utf-8
    

    但格式灵活。例如,您也可拼写encoding,并使用=代替:

  • 用三个点替换水平省略号,如字符串的其余部分所用

  • 将代码点替换为\xhh转义序列以表示编码数据。编码为UTF-8的U + 2026是\xe2\x80\xa6

答案 1 :(得分:5)

# coding: utf-8添加到文件的顶部。

# coding: utf-8
string = "Deepika Padukone, Esha Gupta or Yami Gautam - Who's looks hotter and sexier? Vote! - It's ... Deepika Padukone, Esha Gupta or Yami Gautam…. Deepika Padukone$

fp = open("test.txt", "w+");

fp.write("%s" %string);

说明:

错误是由复制期间非标准字符(如引号(`))替换撇号(')等标准字符引起的。当您从pdf文件复制文本时,它经常发生。差异非常微妙,但就Python而言,存在巨大差异。撇号对于指示文本字符串是完全合法的,但引号不是。

从技术上讲,使用我们想要的任何字符并不完全违法。只是我们必须告诉Python我们正在使用哪种编码,以便它知道如何处理这些非标准字符。将# coding: utf-8添加到该文件的顶部将告诉python您的编码是utf-8。

UTF-8是一种表示Unicode集中字符的编码格式。它在网上被广泛使用。 Unicode是在许多不同平台上表示和处理文本的行业标准,包括Web,企业软件,打印等.UTF-8是用于编码此字符集的更常用的方法之一。