Google App Engine TextProperty и UTF-8: когда кодировать / декодировать

Я нахожусь в Google App Engine 2.5 с шаблоном Django и рамкой Webapp.

Db.TextProperty и UTF-8, Unicode и Decode / Encode так меня смутили. Я бы очень признателен, что некоторые эксперты могут предложить некоторые предложения. Я всю ночь пробовал в Интернете, и у меня так много вопросов.

То, что я пытаюсь сделать:

[utf-8 form input] => [Python, Store in db.TextProperty] => [When Needed, Replace Japanese with English] => [HTML, UTF-8] 

В соответствии с этим ответом Zipping вместе строки unicode в Python

 # -*- coding: utf-8 -*- 

и все .py-файлы, сохраненные в формате utf-8

Вот мой код:

 #Model.py class MyModel(db.Model): content = db.TextProperty() #Main.py def post(self): content=cgi.escape(self.request.get('content')) #what is the type of content? Unicode? Str? or Other? obj = MyModel(content=content) #obj = MyModel(content=unicode(content)) #obj = MyModel(content=unicode(content,'utf-8')) #which one is the best? obj.put() #Replace one Japanese word with English word in the content content=obj.content #what is the type of content here? db.Text? Unicode? Str? or Other? #content=unicode(obj.content, 'utf-8') #Is this necessary? content=content.replace(u'ひと',u'hito') #Output to HTML self.response.out.write(template.render(path, {'content':content}) #self.response.out.write(template.render(path, {'content':content.encode('utf-8')}) 

Надеюсь, что какой-то инженер Google App Engine может увидеть этот вопрос и предложить некоторую помощь. Большое спасибо!

  • Как печатать текст с кодировкой UTF-8 на консоли в Python <3?
  • Вопросы преобразования UTF-8 latin-1, python django
  • python может кодировать utf-8, но не может декодировать
  • как читать файл, который может быть сохранен как ansi или unicode в python?
  • преобразование utf-16 -> utf-8 И удалить спецификацию
  • Как правильно разобрать HTML в кодировке UTF-8 в строки Unicode с помощью BeautifulSoup?
  • Django: символ не-ASCII
  • Python - обработка файлов с смешанным кодированием
  • 2 Solutions collect form web for “Google App Engine TextProperty и UTF-8: когда кодировать / декодировать”

    Сначала прочтите это . И это .

    В двух словах, всякий раз, когда вы имеете дело с текстовой строкой в ​​своем приложении, это должна быть строка в Юникоде. Вы должны закодировать в байтовую строку (экземпляр «str» вместо «unicode»), когда вы хотите отправить данные в виде байтов – например, через HTTP, и вы должны декодировать из байтовой строки, когда вы получаете байты, представляющие текст (и вы знаете их кодировку). Единственные операции, которые вы должны выполнять в байтовой строке, содержащей кодированный текст, – это декодировать или кодировать их.

    К счастью, большинство фреймворков понимают это правильно; Например, webapp и webapp2 (я вижу, что вы используете webapp) должны возвращать строки Unicode из всех методов запроса и кодировать любые строки, которые вы передаете им соответствующим образом. Убедитесь, что все строки, за которые вы отвечаете, являются unicode, и все должно быть в порядке.

    Обратите внимание, что строка байтов может хранить любой тип кодированного данными текста, исполняемый файл, изображение, случайные байты, зашифрованные данные и т. Д. Без метаданных, таких как знание о том, что это текст и какая его кодировка, вы не можете ничего разумного делать с ним, кроме хранения и получения.

    Никогда не пытайтесь декодировать строку юникода или кодировать байтовую строку; он не будет делать то, что вы ожидаете, и все пойдет ужасно неправильно.

    Что касается хранилища данных, db.Text является подклассом unicode ; во всех смыслах и целях это строка в Юникоде – это только другое, поэтому хранилище данных может сказать, что оно не должно индексироваться. Аналогично, db.Blob является подклассом str для хранения байтовых строк.

    Пытаться

     db.Text("text", encoding="utf-8") 

    это помогает мне сохранить текст utf-8 в TextProperty ()

    для получения дополнительной информации см. следующую ссылку: https://developers.google.com/appengine/docs/python/datastore/typesandpropertyclasses?hl=ru#Text

    Python - лучший язык программирования в мире.