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

Posted

技术标签:

【中文标题】如何摆脱python中的ascii编码错误【英文标题】:How to get rid of ascii encoding error in python 【发布时间】:2014-08-14 13:44:59 【问题描述】:
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

【问题讨论】:

阅读所提供的链接了吗? @hd1:真的吗?在源文件中,然后使用 Python 2 运行? 不要只是将它粘贴到交互式 Python 会话中 Deepika Padukone +1。 【参考方案1】:

您的字符串定义中有一个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

【讨论】:

如何在我的源代码中进行源代码编码。我是python的新手 上面发布的字符串取自 JSON 对象,我需要提取字符串。所以可能无法用 3 个点替换省略号。 @user3770743:那为什么不用json模块从文件或HTTP响应中加载JSON数据呢? @user3770743:如果您从 JSON 对象中读取它,与尝试将字符串嵌入源代码相比,您会遇到重叠但不同的问题。【参考方案2】:

# 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 是用于编码此字符集的更流行的方式之一。

【讨论】:

当然,但必须明确说明。您也可以在其他编码中创建水平省略号。

以上是关于如何摆脱python中的ascii编码错误的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决python "Non-ASCII character"错误

如何在使用 request.data 时摆脱 Python 中的“Json 文件导入错误”?

Python ASCII 编解码器在写入 CSV 期间无法编码字符错误

python编码错误的解决办法 SyntaxError: Non-ASCII character 'xe5' in file

怎么解决python "Non-ASCII character"错误

解决Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误