【发布时间】:2012-09-15 10:18:07
【问题描述】:
我正在尝试处理 python 2.7.2 中的 unicode。我知道有.encode('utf-8') 的东西,但是当我添加它时,有 1/2 的时间会出错,而当我不添加它的时候,有 1/2 的时间会出错。
有什么方法可以告诉 python - 我认为是一种最新和现代的语言,只使用 unicode 作为字符串,而不是让我不得不放屁 .encode('utf-8') 的东西?
我知道...python 3.0 应该可以做到这一点,但我不能使用 3.0,而且 2.7 也不是那么旧...
例如:
url = "http://en.wikipedia.org//w/api.php?action=query&list=search&format=json&srlimit=" + str(items) + "&srsearch=" + urllib2.quote(title.encode('utf-8'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 19: ordinal not in range(128)
更新
如果我从我的所有代码中删除所有.encode 语句并将# -*- coding: utf-8 -*- 添加到我的文件顶部,就在#!/usr/bin/python 下方,那么我会得到以下内容,就像我没有添加# -*- coding: utf-8 -*- 一样全部。
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py:1250: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
return ''.join(map(quoter, s))
Traceback (most recent call last):
File "classes.py", line 583, in <module>
wiki.getPage(title)
File "classes.py", line 146, in getPage
url = "http://en.wikipedia.org/w/api.php?action=query&prop=revisions&format=json&rvprop=content&rvlimit=1&titles=" + urllib2.quote(title)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1250, in quote
return ''.join(map(quoter, s))
KeyError: u'\xf1'
我不是手动输入任何字符串,而是从网站解析 HTML 和 json。所以脚本/字节流/不管它们是什么,都是由python创建的。
更新 2 我可以继续处理错误,但它只是不断出现在新的地方。我希望 python 会成为一个有用的脚本工具,但看起来在 3 天没有运气之后我会尝试另一种语言。很遗憾,python 预装在 osx 上。我已将修复我发布的错误的一个实例的答案标记为正确。
【问题讨论】:
-
仅供参考,我刚刚发布了一个相关问题,深入探讨了这个问题的一个方面:stackoverflow.com/questions/12557447/…
-
请阅读joelonsoftware.com/articles/Unicode.html。现在。如果一个人至少不理解本文中的内容,那么他根本无法使用 text 编写工作程序,更不用说正确处理编码转换了。从你的问题措辞可以看出你是在盲目尝试。
-
@jsbueno - 我知道 unicode 是什么,我知道它是如何工作的。 Python 将它推到了你必须盲目尝试使用它的地步。
-
不,你没有。如果您了解 Pytho 是如何工作的,那么 Pytho 的使用方式会非常合理,因为它在上面的链接中得到了很好的解释。
-
顺便说一句..请不要将其视为冒犯性评论。只需阅读这篇文章,您不仅会对手头的任务更有信心,而且不会只处理 Python 文本问题。
标签: python unicode utf-8 python-2.7