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

役に立たないと思いますが、

はい ??

更新しました

ユニコードは「utf-8」だと思います、はい?

4

3 に答える 3

1

他の人がすでに言っているように、Unicode と utf-8 は同じではありません。Utf-8 は、Unicode の多くのエンコーディングの 1 つです。

unicodeオブジェクトは「エンコードされていない」ユニコード文字列と考えてください。一方、stringオブジェクトは特定のエンコーディングでエンコードされています (残念ながら、文字列オブジェクトには、エンコード方法を示す属性がありません)。

val.encode("utf-8")この Unicode オブジェクトを utf-8 でエンコードされた文字列オブジェクトに変換します。

urllibPython 2.6 では、 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'

ただし、すべての文字列が Unicode である Python 3.x (エンコードされた文字列に相当する Python 3 はbytesオブジェクトです) では、もう必要ありません。

>>> import urllib.parse
>>> urllib.parse.quote("ä")
'%C3%A4'
于 2010-08-07T11:35:22.063 に答える
1

utf-8 はエンコーディングであり、Unicode データを一連のバイトとして具体的に表現するためのレシピです。これは、そのような多くのエンコーディングの 1 つです。Pythonstrオブジェクトはバイト文字列であり、特定のエンコーディングのテキストなど、任意のバイナリ データを表すことができます。

Python の unicode 型は、テキストを表現するための抽象的でエンコードされていない方法です。Unicode 文字列は、多くのエンコーディングのいずれかでエンコードできます。

于 2010-05-21T08:30:51.703 に答える
0

Python 3.0 では、すべての文字列が Unicode をサポートしていますが、以前のバージョンでは、文字列を明示的に Unicode 文字列にエンコードする必要がありました。それはそれでしょうか?

(utf-8 は唯一ではありませんが、Unicode の最も一般的なエンコーディングです。これを読んでください。)

于 2010-05-21T08:20:27.777 に答える