首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python Unicode编码错误

Python Unicode编码错误
EN

Stack Overflow用户
提问于 2010-07-12 03:00:48
回答 8查看 260.8K关注 0票数 112

我正在读取和解析Amazon XML文件,当XML文件显示‘时,当我尝试打印它时,我得到以下错误:

代码语言:javascript
复制
'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128) 

根据我到目前为止在网上读到的内容,错误是由于XML文件是UTF-8格式,但Python希望将其作为ASCII编码字符来处理。有没有一种简单的方法可以消除这个错误,让我的程序按读取的方式打印XML?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-07-12 03:10:52

您的问题很可能是您正确地解析了它,而现在您试图打印XML的内容,但却无法打印,因为其中有一些外来的Unicode字符。首先尝试将unicode字符串编码为ascii:

代码语言:javascript
复制
unicodeData.encode('ascii', 'ignore')

“忽略”部分将告诉它跳过这些字符。从python文档中:

代码语言:javascript
复制
>>> # Python 2: u = unichr(40960) + u'abcd' + unichr(1972)
>>> u = chr(40960) + u'abcd' + chr(1972)
>>> u.encode('utf-8')
'\xea\x80\x80abcd\xde\xb4'
>>> u.encode('ascii')
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in position 0: ordinal not in range(128)
>>> u.encode('ascii', 'ignore')
'abcd'
>>> u.encode('ascii', 'replace')
'?abcd?'
>>> u.encode('ascii', 'xmlcharrefreplace')
'&#40960;abcd&#1972;'

您可能想要阅读这篇文章:http://www.joelonsoftware.com/articles/Unicode.html,我发现这篇文章非常有用,它是关于正在发生的事情的基本教程。阅读之后,您将不再觉得您只是在猜测要使用的命令(或者至少在我身上发生了这种情况)。

票数 200
EN

Stack Overflow用户

发布于 2014-01-10 04:24:55

更好的解决方案:

代码语言:javascript
复制
if type(value) == str:
    # Ignore errors even if the string is not proper UTF-8 or has
    # broken marker bytes.
    # Python built-in function unicode() can do this.
    value = unicode(value, "utf-8", errors="ignore")
else:
    # Assume the value object has proper __unicode__() method
    value = unicode(value)

如果您想了解更多关于原因的信息:

http://docs.plone.org/manage/troubleshooting/unicode.html#id1

票数 16
EN

Stack Overflow用户

发布于 2015-06-29 15:46:41

不要在脚本中对环境的字符编码进行硬编码;直接打印Unicode文本:

代码语言:javascript
复制
assert isinstance(text, unicode) # or str on Python 3
print(text)

如果将输出重定向到文件(或管道);您可以使用PYTHONIOENCODING环境变量来指定字符编码:

代码语言:javascript
复制
$ PYTHONIOENCODING=utf-8 python your_script.py >output.utf8

否则,python your_script.py应该按原样工作--您的语言环境设置用于对文本进行编码(on POSIX check:LC_ALLLC_CTYPELANG envvars -如果需要,请将LANG设置为utf-8语言环境)。

To print Unicode on Windows, see this answer that shows how to print Unicode to Windows console, to a file, or using IDLE

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3224268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档