2016-07-26 4 views
3

Я использовал следующий код для кодирования списка параметров:Как 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) 

Как исправить ошибку?

+0

Я думаю, вам нужен конвертер unicode для ascii пример '\\ u524d'. Или проверьте http://stackoverflow.com/questions/2365411/python-convert-unicode-to-ascii-without-errors – KingRider

ответ

5

Кажется, что вы работаете над 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)