のJava、サーブレットは、MySQL、Tomcatと速度を使用して、次のステップが取られた:VelocityでUTF-8を設定するには?
- velocity.properties:
- input.encoding = UTF-8
- output.encoding = UTF-8を
- のserver.xml
- はURIEncoding = UTF-8
<html><head>
文字セット- メタHTTP-当量= "Content-Typeの" コンテンツ= "text/htmlの; CHARSET = UTF-8"
- 日食のプロパティ、プロジェクトのプロパティ、&エディタのエンコードファイル
- セットUTF-8
- JDBC接続に該当するものすべてに:
- db.url = JDBCます。mysql://:?/ useEncoding =真& characterEncoding = UTF-8
- のjava /サーブレットコード:
- request.setCharacterEncoding(UTF-8)
上記のすべてが機能しませんでした。 (UTF-8を返しgetCharacterEncoding()
はない)
private String getParameter(String key) {
String param = request.getParameter(key);
if (Util.isNotEmpty(param)) {
try {
return new String(param.getBytes("8859_1"), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return param;
}
return null;
}
を上記request.setCharacterEncoding
が効果を持っていなかったことを意味し、次のコードが実行されるまで要求ラッパーがThreadLocal
オブジェクトにラップされていることを認識します。
これはどのように発生し、どのように解決できますか?
この現象は、あなた(またはVelocity)がHTTP応答の 'Content-Type'ヘッダーに' charset'属性を設定しなかったことを示します。ページがHTTP経由で提供されている場合、「」タグは**無視されます**。代わりに、HTTP応答Content-Typeヘッダーのcharset属性が使用されます(存在する場合)。 ''タグは、ユーザがウェブページをローカルディスクに保存した後、後で 'file:/// 'によってディスクから見るときにのみ使用されます。あなたの問題はVelocity側で解決される可能性があります。 – BalusC
OK、私はVelocityLayoutServletを拡張してレスポンス文字エンコーディングを設定し、ヘッダーを "Content-Type:text/html; charset = UTF-8"にするように出力しました。 元の投稿(管理者の編集前)で述べたように、この問題はクライアントからサーバーへと起こります。つまり、フォームデータを保存するとき、つまり上記の関数の肯定的な効果です。 ありがとう –