私の同僚は、アクセントのある文字(è、é、àなど)をマングリングする基本的なcontact-usタイプのフォームを作成しました。Struts1でJavaeコマースプラットフォームのKonaKartを使用しています。
問題をHttpServletRequestオブジェクトを介して受信するデータに絞り込みました。同様の(適切に機能している)フォームを比較すると、古いフォームではリクエストオブジェクトの文字エンコード(request.getCharacterEncoding()
)が「UTF-8」として返されますが、新しいフォームではNULLとして返され、テキストはrequest.getParameter()
すでに壊れています。
それを除けば、既知の良い形式と新しく壊れた形式の間に大きな違いは見つかりませんでした。
私が除外したこと:
- 両方のHTMLページに次のタグがあります。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- HTMLの両方のフォームタグはPOSTを使用し、エンコーディングを設定しません
- Firebugから確認すると、RequestヘッダーとResponseヘッダーの両方に同じプロパティがあります
- 両方のJSPページは、
<%@page contentType="text/html;charset=UTF-8" language="java" %>
タグで同じ属性を使用します - * Form.javaファイルでは、リモートで興味深いことは何も起こっていません。どちらもBaseValidatorFormから継承しています。
- ソースファイルのエンコーディングを確認しましたが、すべてデフォルトに設定されています-コンテナから継承:UTF-8
それらをISO-8859-1からUTF-8に変換すると、うまく機能しますが、コアの問題を理解したいと思います。例えば:new String(request.getParameter("firstName").getBytes("ISO-8859-1"),"UTF8")
どんな提案でも大歓迎です、私はすべてアイデアがありません。