如何摆脱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异常错误