этот код полезен? - PullRequest
       4

этот код полезен?

0 голосов
/ 21 мая 2010
def _oauth_escape(val):
    if isinstance(val, unicode):# useful ?
        val = val.encode("utf-8")#useful ?
    return urllib.quote(val, safe="~")

я думаю, что это бесполезно,

да ??

обновлен

я думаю, что юникод - это "utf-8", да?

Ответы [ 3 ]

1 голос
/ 21 мая 2010

utf-8 - это кодировка, рецепт для конкретного представления данных Unicode в виде серии байтов. Это одна из многих таких кодировок. Python str объекты - это строки байтов, которые могут представлять произвольные двоичные данные, такие как текст в определенной кодировке.

Unicode-тип Python - это абстрактный не кодированный способ представления текста. Строки Unicode могут быть закодированы в любой из многих кодировок.

1 голос
/ 07 августа 2010

Как уже говорили другие, юникод и utf-8 - это не одно и то же. UTF-8 является одним из многих кодировок для Unicode.

Думайте о unicode объектах как о "некодированных" строках юникода, тогда как string объекты кодируются в определенной кодировке (к сожалению, строковые объекты не имеют атрибута, который говорит вам, как они кодируются).

val.encode("utf-8") преобразует этот объект Unicode в строковый объект в кодировке utf-8.

В Python 2.6 это необходимо, поскольку urllib не может правильно обрабатывать юникод.

>>> 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'
0 голосов
/ 21 мая 2010

В Python 3.0 все строки поддерживают Unicode, но в предыдущих версиях необходимо явно кодировать строки в строки Unicode. Может ли это быть?

(utf-8 - не единственная, но самая распространенная кодировка для Unicode. Читать this .)

...