Юникод в Python на Google App Engine - PullRequest
       17

Юникод в Python на Google App Engine

1 голос
/ 22 декабря 2010

Мне нужно сделать запрос POST, в котором данные могут быть не ascii (китайские, японские символы). Мне нужно преобразовать входные данные в Unicode и кодировать с помощью utf-8. Вот как я это сделал:

foo = unicode(self.request.get('foo'), 'utf-8') #convert to unicode
foo = foo.encode('utf-8')                       #encode with utf-8
data = {'foo': foo}
payload = urllib.urlencode(data)

Однако, я продолжаю получать эту ошибку в моих журналах:

TypeError: декодирование Unicode не поддерживается

Ответы [ 2 ]

7 голосов
/ 22 декабря 2010

Unicode не может быть декодирован, потому что это уже Unicode.

Попробуйте вместо этого:

if isinstance(var, str):
    var = unicode(var, 'utf-8')
else:
    var = unicode(var)
1 голос
/ 22 декабря 2010

Хорошо, некоторые комментарии:

 foo = unicode(self.request.get('foo'), 'utf-8') #convert to unicode

Не называйте это "конвертировать".Назовите это «расшифровывать», это проясняет.

 foo = foo.encode('utf-8')                       #encode with utf-8

Но почему?Вы только что расшифровали его из UTF8, почему вы его кодируете обратно?Вы также можете сделать:

 foo = self.request.get('foo')

Это эквивалентно двум вышеупомянутым строкам.

Чтобы уменьшить путаницу в Юникоде, прочитайте это: http://www.joelonsoftware.com/articles/Unicode.html

...