Как закрыть кавычки, urlencoded unicode представляет в виде строки в Python?

48
задан smci 14 May 2017 в 10:34
поделиться

4 ответа

%uXXXX нестандартная схема кодирования , которая была отклонена w3c, несмотря на то, что реализация продолжает жить на на земле JavaScript.

более общая техника, кажется, к UTF-8, кодируют строку, и затем % выходит из получающихся байтов с помощью %XX. Эта схема поддерживается urllib.unquote:

>>> urllib2.unquote("%0a")
'\n'

, К сожалению, если Вы действительно потребность для поддержки %uXXXX Вы будете, вероятно, иметь к декодеру самокрутки. Иначе это, вероятно, будет намного более предпочтительно для просто UTF-8, кодируют Ваш unicode, и затем % выходит из получающихся байтов.

А больше полного примера:

>>> u"Tanım"
u'Tan\u0131m'
>>> url = urllib.quote(u"Tanım".encode('utf8'))
>>> urllib.unquote(url).decode('utf8')
u'Tan\u0131m'
68
ответ дан Aaron Maenpaa 26 November 2019 в 18:48
поделиться

Это сделает это, если у Вас абсолютно должно быть это (я действительно соглашаюсь с криками "нестандартных"):

from urllib import unquote

def unquote_u(source):
    result = unquote(source)
    if '%u' in result:
        result = result.replace('%u','\\u').decode('unicode_escape')
    return result

print unquote_u('Tan%u0131m')

> Tanım
6
ответ дан Ali Afshar 26 November 2019 в 18:48
поделиться
def unquote(text):
    def unicode_unquoter(match):
        return unichr(int(match.group(1),16))
    return re.sub(r'%u([0-9a-fA-F]{4})',unicode_unquoter,text)
10
ответ дан Markus Jarderot 26 November 2019 в 18:48
поделиться

существует ошибка в вышеупомянутой версии, где это волнуется иногда, когда существует и закодированный ASCII и закодированные символы unicode в строке. Я думаю конкретно, когда существуют символы от верхних 128 диапазонов как '\xab' в дополнение к unicode.

, например, "%5B%AB%u03E1%BB%5D" вызывает эту ошибку.

я нашел, сделали ли Вы просто unicode сначала, проблема ушла:

def unquote_u(source):
  result = source
  if '%u' in result:
    result = result.replace('%u','\\u').decode('unicode_escape')
  result = unquote(result)
  return result
4
ответ дан 26 November 2019 в 18:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: