0

私は現在、特定のラボ (私は大学で働いています) で発生しているいくつかの問題を解決するために、図書館員向けのレポート アプリ (Django を使用して作成) に取り組んでいます。これを実現するために、問題のあるすべてのラボを一覧表示するページを作成しました。完全に機能する注釈の追加をテストしていました。UTF8 文字を除く。そして、プロセスのどの部分が失敗するのか (まだ) わかりません。

問題: è char がHTML ページでèとして出力されます。

これが私の個人的な「トレースバック」です:

  1. Terminal.app (UTF-8) を使用して、SSH 経由でテスト サーバーに接続しています。
  2. サーバーのLANGen_US.UTF-8
  3. ipython を起動する注釈 ( annotation.text = u'2ème commentaire')を追加しましたpython manage.py shell_plus
  4. 設定を追加DEFAULT_CHARSET="utf-8"してみましたが、変更はありませんでした。
  5. MySQL の構成を確認しました: character_set_databaseisutf8です。ASELECTは右のテキストを示します。
  6. 私のviews.pyでは、DBから注釈を取得して並べ替えるだけです。direct_to_template次に、データを含む dict を呼び出します。
  7. 私のテンプレートでは、HTML ページの文字セットが で設定され<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />、注釈を で出力し{{ annotation.text|escape }}ます。

問題はステップ 5 ~ 6 で発生するようですが、それを特定する方法と、明らかに修正する方法がわかりません。何か考えはありますか?

ありがとう

PS: 必要に応じてさらに多くのコードを提供できますが、混乱する可能性が高くなります (DB 構造がちょっと変だと思います)。


ANSWER (担当者が10人未満なので、今のところ自分で答えることができないので、以下に回答を投稿します。)

ついに答えを見つけました!

In [13]: annotation.text
Out[13]: u'2\xc3\xa8me commentaire'

In [14]: annotation.text = '2ème commentaire'
In [15]: annotation.save()
In [16]: annotation.text
Out[16]: '2\xc3\xa8me commentaire'

どうやら、文字列が UTF-8 であることを示す「u」は「やり過ぎ」だったようです。同じ char を UTF-8 でエンコードする方法は 2 つあります (読んだ内容を正しく理解していれば)。

In [37]: print('\xc3\xa8').decode('utf8')
è

In [38]: print(u'\xe8')
è

In [39]: print(u'\xc3\xa8')
è

私は 2 つの組み合わせを選択しただけですが、それは間違っていました。

とにかく答えてくれてありがとう!

4

1 に答える 1

1

テンプレート (HTML ファイル自体) は UTF-8 でエンコードされていますか?

于 2012-06-06T14:26:30.453 に答える