def _oauth_escape(val):
if isinstance(val, unicode):# useful ?
val = val.encode("utf-8")#useful ?
return urllib.quote(val, safe="~")
我认为这没用,
是的?更新
我认为unicode是'utf-8',是吗?
答案 0 :(得分:1)
utf-8是一种编码,是将unicode数据具体表示为一系列字节的配方。这是许多这样的编码之一。 Python str
对象是字节串,可以表示任意二进制数据,例如特定编码的文本。
Python的unicode类型是一种抽象的,未编码的方式来表示文本。 unicode字符串可以用许多编码中的任何一种编码。
答案 1 :(得分:1)
正如其他人已经说过的那样,unicode和utf-8并不相同。 Utf-8是unicode的众多编码之一。
将unicode
个对象视为“未编码”的unicode字符串,而string
个对象以特定编码进行编码(遗憾的是,字符串对象没有告诉您如何编码的属性)
val.encode("utf-8")
将此unicode对象转换为utf-8编码的字符串对象。
在Python 2.6中,这是必要的,因为urllib
无法正确处理unicode。
>>> import urllib
>>> urllib.quote(u"")
''
>>> urllib.quote(u"ä")
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py:1216: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
res = map(safe_map.__getitem__, s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 1216, in quote
res = map(safe_map.__getitem__, s)
KeyError: u'\xe4'
>>> urllib.quote(u"ä".encode("utf-8"))
'%C3%A4'
Python 3.x但是,所有字符串都是unicode(Python 3相当于编码字符串是bytes
对象),不再需要了。
>>> import urllib.parse
>>> urllib.parse.quote("ä")
'%C3%A4'
答案 2 :(得分:0)
在Python 3.0中,所有字符串都支持Unicode,但是对于以前的版本,必须将字符串显式编码为Unicode字符串。可能是吗?
(utf-8不是唯一的,但是最常见的Unicode编码。阅读this。)