首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python UnicodeEncodeError / Wikipedia-API

Python UnicodeEncodeError / Wikipedia-API
EN

Stack Overflow用户
提问于 2012-11-17 17:33:51
回答 3查看 1.4K关注 0票数 2

我试图用解析这个文档:

machine

第七项如下文本标记:

对机器1994-1995年巡回赛的愤怒

当我试图打印文本“愤怒反对机器的1994-1995年之旅”时,蟒蛇给了我这样的答案:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2013' in position 31: ordinal not in range(128)

我可以通过将u'\u2013‘替换为'-’来解决这个问题,如下所示:

itemText = itemText.replace(u'\u2013', '-')

然而,我没有编码的每一个字符呢?我不想忽视它们,也不想列出每一个可能的发现和替代。

当然,库必须存在才能尝试--最好是从已知的编码列表中检测编码(不管有多大可能出错)。

代码语言:javascript
复制
someText = getTextWithUnknownEncoding(someLocation);
bestAsciiAttemptText = someLibrary.tryYourBestToConvertToAscii(someText)

谢谢

EN

回答 3

Stack Overflow用户

发布于 2012-11-17 17:36:16

将其解码为UTF-8应该有效:

代码语言:javascript
复制
itemText = itemText.decode('utf-8')
票数 1
EN

Stack Overflow用户

发布于 2013-03-11 22:38:40

通常,您应该尝试将字符保留为unicode或utf-8。避免将字符转换为本地代码页,因为这会导致信息丢失。

但是,如果你必须的话,这里有。没什么可做的。让我们使用您的示例字符:

代码语言:javascript
复制
>>> s = u'\u2013'

如果要打印字符串,例如用于调试,可以使用repr

代码语言:javascript
复制
>>> print(repr(s))
u'\u2013'

在交互式会话中,只需键入变量名即可获得相同的结果:

代码语言:javascript
复制
>>> s
u'\u2013'

如果您确实希望将文本转换为本地代码页,并且将此代码页外的字符转换为“?”,则可以使用以下命令:

代码语言:javascript
复制
>>> s.encode('latin-1', 'replace')
'?'

如果'?‘不够好,可以使用translate将选定的字符转换为this answer中的等效字符。

票数 0
EN

Stack Overflow用户

发布于 2012-11-17 17:38:26

您可能需要显式声明您的编码。

在文件的第一行(或者在hashbang之后,如果有),添加以下行:

-*- coding: utf-8 -*-

这个“神奇的注释”迫使Python期待UTF-8字符,并应该成功地解码它们。

更多细节:http://www.python.org/dev/peps/pep-0263/

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

https://stackoverflow.com/questions/13432995

复制
相关文章

相似问题

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