私はTapestryアプリケーションを使用して、フォームからデータを取得し、データベースに書き込み、結果を表示します。特殊文字(Ä、Ö、Ü、ß、€...)を使用しない限り、すべて正常に機能します。Tapestry:文字エンコーディングの問題
など。テキスト
TestäöüßÄÖÜ€$
は、私は問題が間違った文字エンコーディングの設定とは何かを持っていると思い
TestäöüÃÃÃÃâ¬$
になります。
タペストリーJavaクラス:
@Component(parameters = {"clientValidation=false"})
private Form form;
@Component(parameters = {"value=someDTO.name"})
private TextField someNameField;
タペストリーテンプレート:
<t:form t:id="form">
...
<t:textfield t:id="someNameField"/>
...
</t:form>
、私はいくつかの場所で私のエンコード設定を確認:
- HTMLソース:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
の
タペストリーの設定が(これはとにかくデフォルトでなければなりません):
はtapestry.charset=UTF-8
Firefoxは言う([ツール]> [ページ情報:エンコーディング):UTF-8。
基礎となるデータベース(オラクル)もUTF-8を使用:
character_set_system utf8
をそれから私は、POSTリクエストと二つのヘッダは私の目を引いた検討:
ヘッダーに指定されたコンテンツタイプはありません。
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
スペースは%20の代わりに+でエンコードされています。
私はまた、次のことを試してみました:
@Component(parameters = {"clientValidation=false", "enctype='application/x-www-form-urlencoded; charset=UTF-8'"})
private Form form;
と
@Component(parameters = {"clientValidation=false", "enctype='application/x-www-form-urlencoded; charset=UTF-8'", "accept-charset='utf-8'"})
private Form form;
しかし、誰成功の両方(と私は一般的な解決策ではない回避策を探しています)。
興味深いことにthis proposalは、いくつかの特殊文字(ä、ö、ü、ßなど)で動作しますが、ISO-8859-1を使用したくありません。 UTF-8にフォームのエンコーディングを設定するにはどうしたらいいですか?何が欠けているのか、私の問題の理由がまったく違うのですか?
EDIT:データベースなしでテストを行いましたが、問題が残っています。そのため、db側のエンコード設定が間違っているわけではありません。
あなたはどのバージョンのタペストリーを使用していますか? – Mark
これはTapestryの問題ではありません。エンコードは一般的にUTF-8で、うまくいきます。デバッガを使用すると、文字列は最初の時点でどの時点で破損していますか? (私はかつてこれを引き起こしたTomcatインスタンスの設定に問題がありました) – Henning
私はTapestry 5.2.5とJetty 6.1.14を使用していますが、問題はTomcatの展開と同じです。私は、dbなしのサンプルページを作っただけで、テキストフィールドからDTOクラスに値を書き込みます。私はonValidateメソッドにブレークポイントを設定し、その文字列はすでにそこに壊れています。タペストリーの内部構造をより深くデバッグする上で、どこを見なければならないのですか?どの設定がTomcatで誤って設定される可能性がありますか。 – martin