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

我認爲這是沒有用的,是這個代碼有用嗎?

是?

更新

我覺得unicode是「UTF-8」,是嗎?

+1

Unicode不是UTF-8。他們是不同的東西,但你會經常看到他們一起討論。伊沃的答案中的鏈接是一個很好的參考開始。 – 2010-05-21 08:31:05

回答

0

在Python 3.0中,所有字符串都支持Unicode,但在以前的版本中,必須將字符串顯式編碼爲Unicode字符串。這可能嗎?

(UTF-8不是唯一的,但是對Unicode最常見的編碼閱讀this。)

+0

Python 2和Python 3都有兩種字符串類型,一種用於表示原始數據(Python 2.x的「str」和Python 3.x的「字節」),另一種用於表示帶有一系列unicode代碼點的文本(Python 2.x的「 unicode'和Python 3.x的'str')。 – 2010-05-21 08:27:06

1

UTF-8是一種編碼,用於具體表示Unicode數據作爲一系列字節的配方。這是許多這樣的編碼之一。 Python str對象是字節串,它可以表示任意的二進制數據,例如特定編碼中的文本。

Python的unicode類型是一種抽象的非編碼方式來表示文本。 unicode字符串可以用許多編碼中的任何一種進行編碼。

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'