JavaのWebプログラミングでは文字化けがよく起こりますが、文字化けを回避するための設定方法を詳しく解説していきます
1 Webページのエンコード
Webページを書く際には、Webのエンコード形式を指定する必要があります。ページを指定するには を使用します。このとき、ブラウザはリクエストの読み取りや送信を行う際に、指定されたエンコード形式でデータを保存または送信します。ここではutf-8形式で表示されます。
例: コードスニペット:
<form action="/Pro1/bb" method="post"> 用户名: <input type="text" name="username" ><br> 性别: 男<input type="radio" name="gender" value="男"> 女<input type="radio" name="gender" value="女"><br> 喜欢的颜色:<br> 红<input type="checkbox" name="color" value="红"> 绿<input type="checkbox" name="color" value="绿"> 蓝<input type="checkbox" name="color" value="蓝"> <br>来自的国家 <select name="country"> <option value="中国">中国</option> <option value="美国">美国</option> <option value="日本">日本</option> </select> <br> <input type="submit" value="提交"> <input type="reset" value="重置"> </form>
2 バックエンドはリクエストデータを読み取ります
Java Web サーブレットでリクエストされたデータを取得するには、送信されたバイナリデータを対応するコードテーブルに従ってデコードして、対応する人間は文字列を読むことができます。この例ではpostメソッドを使用しているため、postリクエストを処理する際、中国語のリクエストパラメータを取得する前にエンコード形式を設定しておかないと文字化けが発生します。これは、サーバーがデフォルトでデコードに iso-8859-1 エンコード テーブルを使用するためです。
もちろん、出力で中国語の文字を出力したい場合は、統一された文字エンコーディングを使用する必要もあります。ここでは utf-8 です。コードは次のとおりです
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String gender = request.getParameter("gender"); String[] colors = request.getParameterValues("color"); String country = request.getParameter("country"); out.println("<!DOCTYPE HTML>"); out.println("<HTML>"); out.println(" <HEAD><TITLE>测试servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print("<h1>以下是您的输入</h1>"); out.print("<p>"); out.print("您的用户名:"+username+"<br>"); out.print("您的性别:"+gender+"<br>"); out.print("您喜欢的颜色:"); for(String cr:colors){ out.print(cr+" "); } out.print("<br>"); out.print("您的国家:"+country+"<br>"); out.print("</p>"); out.println(" </BODY>"); out.println("</HTML>"); }
注: request.setCharacterEncoding("utf-8 "); 要求側エンティティのコンテンツに対してのみ有効です。 post リクエスト パラメータはリクエスト エンティティに格納され、get メソッドのリクエスト パラメータは疑問符で始まる URL の後に配置され、複数のパラメータは「&」で接続されます。したがって、get メソッドのパラメータを取得したい場合は、手動でデコードするか、フィルターを使用する必要があります。
簡単のため、手動でデコードする方法では、性別のみをデコードします。実際の使用では、各パラメータをデコードする必要があります: String 性別 = new String(req.getParameter("gender").getBytes("iso-8859-1) " ), "utf-8") ;
この時点で、Web ページとサーバー上の中国語の文字化けの問題は完全に解決できます。文字化けは、エンコードとデコードに使用されるコーディング テーブルの違いが原因であることを覚えておいてください。同じコーディングテーブルを使用すると問題が解決します。