私は現在、特定のラボ (私は大学で働いています) で発生しているいくつかの問題を解決するために、図書館員向けのレポート アプリ (Django を使用して作成) に取り組んでいます。これを実現するために、問題のあるすべてのラボを一覧表示するページを作成しました。完全に機能する注釈の追加をテストしていました。UTF8 文字を除く。そして、プロセスのどの部分が失敗するのか (まだ) わかりません。
問題: è char がHTML ページでèとして出力されます。
これが私の個人的な「トレースバック」です:
- Terminal.app (UTF-8) を使用して、SSH 経由でテスト サーバーに接続しています。
- サーバーの
LANG
はen_US.UTF-8
- ipython を起動する注釈 (
annotation.text = u'2ème commentaire'
)を追加しましたpython manage.py shell_plus
- 設定を追加
DEFAULT_CHARSET="utf-8"
してみましたが、変更はありませんでした。 - MySQL の構成を確認しました:
character_set_database
isutf8
です。ASELECT
は右のテキストを示します。 - 私のviews.pyでは、DBから注釈を取得して並べ替えるだけです。
direct_to_template
次に、データを含む dict を呼び出します。 - 私のテンプレートでは、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 つの組み合わせを選択しただけですが、それは間違っていました。
とにかく答えてくれてありがとう!