Меня удивляет, что у меня есть 2 функции с HTTP POST, где один разбивает иностранные символы, и я просто делаю self.request.POST.get('text')
, чтобы получить значение в обеих функциях.Различие, которое я вижу, состоит в том, что, когда оно ломается, оно наследует blobstoreuploadhandler
, поэтому я подозреваю, что это может быть связано с этим изменением.Я, например, не понимаю, почему ÅÄÖ сначала работает, а затем я делаю кажущееся несвязанным изменение, и неожиданно любой не-ASCII-символ искажается.
Пожалуйста, помогите мне понять, как python должен работать с unicode и utf-8.
У меня есть полные 2 примера кода, где один работает, а другой искажает иностранные символы, такие как ÅÄÖ, и мне просто нужно знать, что изменить, и я думаю, что можно настроить его так, чтобы он вел себя так, как ожидалось.
Чтобы точно понять, в чем проблема, может быть, полезно знать, что если я введу ÅÄÖ, то выходной результат станет xcTW, когда он должен быть ÅÄÖ.
2 упомянутых фрагмента кода
class AList(RequestHandler, I18NHandler):
...
a.text = self.request.POST.get('text')
Выше работает.Затем я изменился на
class AList(RequestHandler, I18NHandler, blobstore_handlers.BlobstoreUploadHandler):
...
a.text = self.request.POST.get('text')
И, похоже, это единственное отличие.У меня есть две идеи: развернуть 2 примера с одним и тем же приложением и посмотреть, что на самом деле вызывает эту проблему, поскольку она может быть или не быть в коде, который я вставляю здесь.
И это также просто производственная проблема, когда локальные иностранные символы работают, как и ожидалось.
Похоже, это связано с использованием blobstoreuploadhandler, поскольку следующее воспроизводит искаженные символы по электронной почте:
class ContactUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
message = mail.EmailMessage(sender='admin@myapplicationatappspot.com', subject=self.request.POST.get('subject'))
message.body = ('%s \nhttp://www.myapplicationatappspot.com/') % ( self.request.POST.get('text') )
message.to='info@myapplicationatappspot.com'
message.send()
self.redirect('/service.html')