Как я могу понять это сообщение об ошибке Python? - PullRequest
0 голосов
/ 05 марта 2011

Привет, вы можете помочь мне расшифровать это сообщение и что делать:

main.py", line 1278, in post
    message.body = "%s %s/%s/%s" % (msg, host, ad.key().id(), slugify(ad.title.encode('utf-8')))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 1: ordinal not in range(128)

Спасибо

ОБНОВЛЕНИЕ, попытавшись удалить кодированный вызов, похоже, оно работает:

class Recommend(webapp.RequestHandler):
    def post(self, key):
        ad= db.get(db.Key(key))
        email = self.request.POST['tip_email']     
        host = os.environ.get("HTTP_HOST", os.environ["SERVER_NAME"])
        senderemail = users.get_current_user().email() if users.get_current_user() else 'info@monton.cl' if host.endswith('.cl') else 'info@monton.com.mx' if host.endswith('.mx') else 'info@montao.com.br' if host.endswith('.br') else 'admin@koolbusiness.com'
        message = mail.EmailMessage(sender=senderemail, subject="%s recommends %s" % (self.request.POST['tip_name'], ad.title) )
        message.to = email
        message.body = "%s %s/%s/%s" % (self.request.POST['tip_msg'],host,ad.key().id(),slugify(ad.title))
        message.send()
        matched_images=ad.matched_images
        count = matched_images.count()
        if ad.text:
            p = re.compile(r'(www[^ ]*|http://[^ ]*)')
            text = p.sub(r'<a href="http://\1" rel="nofollow">\1</a>',ad.text.replace('http://',''))
        else:
            text = None
        self.response.out.write("Message sent<br>")
        path = os.path.join(os.path.dirname(__file__), 'market', 'market_ad_detail.html')
        self.response.out.write(template.render(path, {'user_url':users.create_logout_url(self.request.uri) if users.get_current_user() else users.create_login_url(self.request.uri),
        'user':users.get_current_user(), 'ad.user':ad.user,'count':count, 'ad':ad, 'matched_images': matched_images,}))

Ответы [ 4 ]

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

В одном из этих полей есть символы, которые не могут быть закодированы. Если вы переключитесь на python 3 (он лучше поддерживает юникод) или измените кодировку всего сценария, проблема должна прекратиться, и лучший способ изменить кодировку в 2.x - использовать строку комментария кодировки. Если вы увидите http://evanjones.ca/python-utf8.html, вы увидите более подробное объяснение использования python с поддержкой utf-8, лучшее предложение - добавить # -*- coding: utf-8 -*- в начало вашего скрипта. И обрабатывать сценарии, как это

s = "hello normal string"
u = unicode( s, "utf-8" )
backToBytes = u.encode( "utf-8" )
1 голос
/ 06 марта 2011

Проблема в том, что ваша базовая модель (message.body) хочет только текст ASCII, но вы пытаетесь задать ей строку, закодированную в юникоде.

Но так как у вас есть нормальная строка ascii, вы можете просто заставить python распечатать '?' символ, если у вас есть строка без печати ascii.

"UNICODE STRING".encode('ascii','replace').decode('ascii')

Так как в вашем примере выше:

message.body = "%s %s/%s/%s" % \
     (msgencode('ascii','replace').decode('ascii'),
     hostencode('ascii','replace').decode('ascii'),
     ad.key().id()encode('ascii','replace').decode('ascii'),
     slugify(ad.title)encode('ascii','replace').decode('ascii'))

Или просто кодировать / декодировать переменную, которая имеет символ Unicode.

Но это не оптимальное решение. Лучше всего сделать message.body строкой Unicode. Поскольку это кажется невозможным (я не знаком с GAE), вы можете использовать это, чтобы, по крайней мере, не иметь ошибок.

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

У вас есть персонаж Unicode в месте, которое вы не должны.Чаще всего я нахожу, что эта ошибка связана с наклонными кавычками в стиле MS Word.

0 голосов
/ 30 марта 2012

У меня была похожая проблема при использовании Django norel и Google App Engine.

Проблема была в папке, содержащей приложение.Возможно, это не проблема, описанная в этом вопросе, но, возможно, помогает кому-то не тратить время, как я.

Попробуйте сначала изменить папку приложения, возможно, на / home /, и попробуйте запустить снова, если нене работает, попробуйте что-нибудь еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...