0

非常に基本的なUnicode Python の問題> Google App Engine APIの Python 2.5 で、カスタム TinyWebDB データベース ( UTF-8でエンコードされたCSVファイル)から Web 側で正しいラテン アクセントを表示できません。 main.py

ウェブ上: タグ = ボール ベアリング / 値 = ルールメント \u00e0 請求書 => NOK!

Android フォンの場合: tag = ボール ベアリング / 値 = roulement à billes => OK!

注: また、ファイルにラテン文字を導入するとmain.py、実行時にエラー メッセージが表示されます。

解決策は何ですか?

私のコードから抽出:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import codecs

class StoredData(db.Model):
    tag = db.StringProperty()
    value = db.StringProperty(multiline=True)
    date = db.DateTimeProperty(required=True, auto_now=True)


def get_value(self, tag):
    entry = db.GqlQuery("SELECT * FROM StoredData where tag = :1", tag).get()
        if entry:
            value = entry.value
        else:
            value = "No result"
        WritePhoneOrWeb(self, lambda : json.dump(value, self.response.out))

#### Write response to the phone or to the Web depending on fmt
#### Handler is an appengine request handler.  writer is a thunk
#### (i.e. a procedure of no arguments) that does the write when invoked.
def WritePhoneOrWeb(handler, writer):
    if handler.request.get('fmt') == "html":
        WritePhoneOrWebToWeb(handler, writer)
    else:
        handler.response.headers['Content-Type'] = 'application/jsonrequest'
    writer()

#### Write to the Web (without checking fmt)
def WriteToWeb(handler, writer):
    handler.response.headers['Content-Type'] = 'text/html;charset=UTF-8'
    handler.response.out.write('<html><body>')
    writer()
    WriteWebFooter(handler, writer)
4

1 に答える 1

0

私は自分のコードに追加しました:

 value = unicode(value)
 value = value.encode('ascii','xmlcharrefreplace')

そしてそれは完全に機能します。

フィリップ

于 2012-06-27T20:22:44.277 に答える