3

私は、Django テンプレートと Webapp フレームを使用して Google App Engine 2.5 を使用しています。

db.TextProperty と UTF-8 と Unicode とデコード/エンコードは、私をとても混乱させました。何人かの専門家がいくつかの提案を提供できることを本当に感謝しています. 私は一晩中グーグルで検索しましたが、まだたくさんの質問があります.

私がやろうとしていること:

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

この回答によると、Pythonでユニコード文字列を一緒に圧縮する

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

および utf-8 形式で保存されたすべての .py ファイル

これが私のコードです:

#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 エンジニアがこの質問を見て、助けてくれることを願っています。どうもありがとう!

4

2 に答える 2

1

まず、これを読んでください。そしてこれ

一言で言えば、アプリでテキスト文字列を処理するときは常に、Unicode文字列である必要があります。データをバイトとして送信する場合(たとえば、HTTP経由)、バイト文字列('unicode'ではなく'str'のインスタンス)にエンコードする必要があります。テキストを表すバイトを受信する場合は、バイト文字列からデコードする必要があります。 (そしてあなたはそれらのエンコーディングを知っています)。エンコードされたテキストを含むバイト文字列に対して実行する必要がある唯一の操作は、それらをデコードまたはエンコードすることです。

幸いなことに、ほとんどのフレームワークはこれを正しく行っています。たとえば、webappとwebapp2(webappを使用していることがわかります)は、すべてのリクエストメソッドからUnicode文字列を返し、それらに渡す文字列を適切にエンコードする必要があります。担当するすべての文字列がユニコードであることを確認してください。問題がないはずです。

バイト文字列には、エンコードされたテキスト、実行可能ファイル、画像、ランダムバイト、暗号化されたデータなど、あらゆる種類のデータを格納できることに注意してください。テキストであるという知識やメタデータがどのようなエンコーディングであるかなどのメタデータがなければ、メタデータを保存して取得する以外に、賢明なことはできません。

Unicode文字列をデコードしたり、バイト文字列をエンコードしたりしないでください。それはあなたが期待することをしません、そして物事はひどく悪くなります。

データストアに関しては、 ;db.Textのサブクラスです。unicodeすべての意図と目的にとって、これUnicode文字列です。これは異なるだけなので、データストアはインデックスを作成すべきではないと判断できます。同様に、はバイト文字列を格納するためdb.Blobののサブクラスです。str

于 2012-05-28T07:09:21.107 に答える
0

試す

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

utf-8 テキストを TextProperty() に保存するのに役立ちます

詳細については、次のリンクを参照してください: https://developers.google.com/appengine/docs/python/datastore/typesandpropertyclasses?hl=en#Text

于 2012-12-29T07:52:50.110 に答える