我试图用解析这个文档:
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', '-')
然而,我没有编码的每一个字符呢?我不想忽视它们,也不想列出每一个可能的发现和替代。
当然,库必须存在才能尝试--最好是从已知的编码列表中检测编码(不管有多大可能出错)。
someText = getTextWithUnknownEncoding(someLocation);
bestAsciiAttemptText = someLibrary.tryYourBestToConvertToAscii(someText)谢谢
发布于 2012-11-17 17:36:16
将其解码为UTF-8应该有效:
itemText = itemText.decode('utf-8')发布于 2013-03-11 22:38:40
通常,您应该尝试将字符保留为unicode或utf-8。避免将字符转换为本地代码页,因为这会导致信息丢失。
但是,如果你必须的话,这里有。没什么可做的。让我们使用您的示例字符:
>>> s = u'\u2013'如果要打印字符串,例如用于调试,可以使用repr
>>> print(repr(s))
u'\u2013'在交互式会话中,只需键入变量名即可获得相同的结果:
>>> s
u'\u2013'如果您确实希望将文本转换为本地代码页,并且将此代码页外的字符转换为“?”,则可以使用以下命令:
>>> s.encode('latin-1', 'replace')
'?'如果'?‘不够好,可以使用translate将选定的字符转换为this answer中的等效字符。
发布于 2012-11-17 17:38:26
您可能需要显式声明您的编码。
在文件的第一行(或者在hashbang之后,如果有),添加以下行:
-*- coding: utf-8 -*-
这个“神奇的注释”迫使Python期待UTF-8字符,并应该成功地解码它们。
更多细节:http://www.python.org/dev/peps/pep-0263/
https://stackoverflow.com/questions/13432995
复制相似问题