Как URL-кодировать китайские иероглифы?

Я использовал следующий код для кодирования списка параметров:

params['username'] = user
params['q'] = q
params = urllib.quote(params)

Но это не работает, когда q равно 香港. Возвращается следующая ошибка:

'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

Как мне это исправить?


person LA_    schedule 26.07.2016    source источник
comment
Я думаю, вам нужен конвертер юникода в ascii пример \\u524d. Или проверьте stackoverflow.com/questions / 2365411 /   -  person KingRider    schedule 27.07.2016


Ответы (1)


Похоже, вы работаете над Python 2+.

Потому что ваш вопрос недостаточно ясен, я предлагаю нормальный способ его решения.

Вот два совета, как это исправить:

  • добавьте # encoding: utf-8 перед вашим файлом
  • кодируйте китайские символы в utf-8 перед вызовом quote

Вот пример:

 # encoding: utf-8

import urllib


def to_utf8(text):
    if isinstance(text, unicode):
        # unicode to utf-8
        return text.encode('utf-8')
    try:
        # maybe utf-8
        return text.decode('utf-8').encode('utf-8')
    except UnicodeError:
        # gbk to utf-8
        return text.decode('gbk').encode('utf-8')


if __name__ == '__main__':
                # utf-8       # utf-8                   # unicode         # gdk
    for _text in ('香港', b'\xe9\xa6\x99\xe6\xb8\xaf', u'\u9999\u6e2f', b'\xcf\xe3\xb8\xdb'):
        _text = to_utf8(_text)
        print urllib.quote(_text)
person Kxrr    schedule 27.07.2016