这段代码有用吗?

时间:2010-05-21 08:13:46

标签: python encode

def _oauth_escape(val):
    if isinstance(val, unicode):# useful ?
        val = val.encode("utf-8")#useful ?
    return urllib.quote(val, safe="~")

我认为这没用,

是的?

更新

我认为unicode是'utf-8',是吗?

3 个答案:

答案 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。)

相关问题