def _oauth_escape(val):
if isinstance(val, unicode):# useful ?
val = val.encode("utf-8")#useful ?
return urllib.quote(val, safe="~")
我認爲這是沒有用的,是這個代碼有用嗎?
是?
更新
我覺得unicode是「UTF-8」,是嗎?
def _oauth_escape(val):
if isinstance(val, unicode):# useful ?
val = val.encode("utf-8")#useful ?
return urllib.quote(val, safe="~")
我認爲這是沒有用的,是這個代碼有用嗎?
是?
更新
我覺得unicode是「UTF-8」,是嗎?
在Python 3.0中,所有字符串都支持Unicode,但在以前的版本中,必須將字符串顯式編碼爲Unicode字符串。這可能嗎?
(UTF-8不是唯一的,但是對Unicode最常見的編碼閱讀this。)
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
UTF-8是一種編碼,用於具體表示Unicode數據作爲一系列字節的配方。這是許多這樣的編碼之一。 Python str
對象是字節串,它可以表示任意的二進制數據,例如特定編碼中的文本。
Python的unicode類型是一種抽象的非編碼方式來表示文本。 unicode字符串可以用許多編碼中的任何一種進行編碼。
正如其他人已經說過,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'
Unicode不是UTF-8。他們是不同的東西,但你會經常看到他們一起討論。伊沃的答案中的鏈接是一個很好的參考開始。 – 2010-05-21 08:31:05