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);
Run Code Online (Sandbox Code Playgroud)
运行上面的代码后,我得到以下错误.
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
Run Code Online (Sandbox Code Playgroud)
您的字符串定义中有一个U + 2026 HORIZONTAL ELLIPSIS字符:
... Deepika Padukone, Esha Gupta or Yami Gautam…. ...
^
Run Code Online (Sandbox Code Playgroud)
如果要在源中使用任何非ASCII字符,Python要求您声明源代码编码.
您的选择是:
声明编码,如链接的PEP 263中指定的那样.它是一个注释,必须是源文件的第一行或第二行.
您设置的内容取决于您的代码编辑器.如果要保存编码为UTF-8的文件,则注释类似于:
# coding: utf-8
Run Code Online (Sandbox Code Playgroud)
但格式灵活.encoding例如,您也可拼写它,而=不是使用:.
用三个点替换水平省略号,如字符串的其余部分所使用的那样
\xhh转义序列替换代码点以表示编码数据.U + 2026编码为UTF-8 \xe2\x80\xa6.添加# 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);
Run Code Online (Sandbox Code Playgroud)
说明:
该错误是由复制期间非标准字符(如引号(`))替换撇号(')等标准字符引起的.当您从pdf文件复制文本时,它经常发生.差异非常微妙,但就Python而言,存在巨大差异.撇号对于指示文本字符串是完全合法的,但引号不是.
从技术上讲,使用我们想要的任何字符并不完全违法.只是我们必须告诉Python我们正在使用哪种编码,以便它知道如何处理这些非标准字符.添加# coding: utf-8到该文件的顶部将告诉python您的编码是utf-8.
UTF-8是一种表示Unicode集中字符的编码格式.它在网上被广泛使用.Unicode是用于在许多不同平台上表示和处理文本的行业标准,包括Web,企业软件,打印等.UTF-8是用于编码该字符集的更流行的方式之一.