0

repoze.bfg v1.3 と chameleon v2 (zpt テンプレート) を使用しています。テンプレートのレンダリング中にエンコードに問題が発生しました:

UnicodeDecodeError: 'ascii' コーデックは位置 9 のバイト 0xc5 をデコードできません: 序数が範囲外です (128)

chameleon で utf-8 エンコーディングを使用するように repoze.bfg を構成するにはどうすればよいですか?
Configurator に以下を追加しました。

 config.add_settings(encoding="UTF-8")
 config.add_settings(default_encoding="UTF-8")

そして、助けていません。

4

2 に答える 2

1

問題は、translationstringカメレオンが使用するライブラリにあります。カメレオンは異なるエンコーディングを使用するように構成できますが、取得したデータを直接translationstringに渡します。
コンストラクター内のTranslationstring。取得したデータからUnicodeを作成しようとします。データが非ASCIIバイトシーケンス(Python 2.xのstr)の場合、エラーが発生します。

解決策は、常にユニコードを翻訳文字列に渡すか、次の差分を使用してライブラリ自体を更新することです。

65c69
<        self = unicode.__new__(self, msgid)
--- patch
>       try:
>           self = unicode.__new__(self, msgid, "utf8")  # FIXED~
>       except Exception as e:
>           self = unicode.__new__(self,msgid)
于 2012-01-13T02:07:39.897 に答える
0

0xc5 は latin-1 を使用した Å であり、Python はソース エンコーディングを知らずに utf-8 に変換できません

この文字列が cgi フォームから来ている場合は、サーバーが正しいエンコーディングを設定していることを確認してください

ヒント:

lynx -dump -mime_header http://url_of_the_page_with_the_form_to_compile|less

そして次のようなものを探します

コンテンツ タイプ: テキスト/html; 文字セット=UTF-8

文字セットが utf-8 でない場合、構成が間違っています。おそらく、Apache が設定をオーバーライドしますか?

于 2011-05-25T01:53:40.980 に答える