html から、英語以外の文字のデータをコントローラーに使用しています。例) マルチ章バイトを URL にポストリクエストとして渡す。
しかし、コントローラーのデータは次のように受信しています
マルチバイト
この問題を解決する方法について誰か助けてもらえますか?
まず、UTF-8 コンテンツを提供していて、UTF-8 送信を期待していることをブラウザーに伝える必要があります。これを行うには、JSP の一番上に行を配置します。
<%@page pageEncoding="UTF-8" %>
または、次のエントリを追加して、すべての JSPweb.xml
で繰り返す必要がないようにします。@page
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
次に、UTF-8 を使用して POST 要求パラメーターを解析するようにサーブレット API に指示する必要があります。これは、基本的に次のことを行うサーブレット フィルターを作成することで実行できます。
@WebFilter("/*")
public class CharacterEncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
chain.doFilter(req, res);
}
// ...
}
それで全部です。必要はありません<form accept-charset>
(MSIE ブラウザーを使用すると状況が悪化します) 。また、必ずしも必要ではありません<meta http-equiv="content-type">
(ページが HTTP ではなくローカル ディスク ファイル システムから提供される場合にのみ解釈されます)。
またはロガーを使用しSystem.out.println()
て送信された値を検証する場合は、UTF-8 を使用して文字を表示するように構成する必要があることに注意してください。
これをアクションメソッドで使用できます
request.setCharacterEncoding("UTF-8");
request.getParameter()
これは、呼び出す前に呼び出す必要があります
必要に応じてエンコーディングを変更するだけです
こちらも参考にできます