Как получить переменные в сообщении в google app engine, содержащем строку с такими символами, как: õ á? - PullRequest
2 голосов
/ 15 марта 2011
email = self.request.get('email')
name = self.request.get('name')
mail.send_mail(sender="myemail", email=email, body=name, subject="sss " + name + "sdafsaã")

// добавлено: проблема заключалась в том, что «sdafsaã» должно быть «sdafsaã».с "и" перед строкой.и теперь он работает

, тогда я получаю

main.py", line 85, in post

subject="sss " + name + "sdafsa",
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 36: ordinal not in range(128)

, возможно, у него есть символы типа õ ó и что-то подобное.

для более подробной информации:

код для запуска работника (предыдущий код) - это имя, полученное из хранилища данных и содержащее символы типа õ и ó ...

 taskqueue.add(url='/emailworker', params={'email': e.email, 'name': e.name})

спасибо

Ответы [ 4 ]

2 голосов
/ 15 марта 2011

Попробуйте немного прочитать о том, как работает юникод в Python:

Кроме того, убедитесь, что вы используете Python 2.5, если видите эту ошибку на сервере разработки.

1 голос
/ 15 марта 2011

Вы должны использовать:

email = self.request.get('email')
name = self.request.get('name')
mail.send_mail(sender="myemail", 
               email=email, 
               body=name, 
               subject="hello " + name.encode('utf-8') + " user!")

Переменная name является строкой Unicode и должна быть закодирована в utf-8 или в виде кодирования, который вы используете в своем веб-приложении перед объединением с другими строками байтов.
Без name.encode() Python использует кодек по умолчанию 7 бит ascii, который не может кодировать этот конкретный символ.

0 голосов
/ 08 июля 2011

Попробуйте с encode

t ='việt ứng '
m = MyModel()
m.data = t.encode('utf-8')
m.put() #success!
0 голосов
/ 15 марта 2011

проблема состоит в соединении 2 строк: ||| body = name + "ã" => error ||| body = name + u "ã" => работает !!! |||

...