Java Web のリクエストとレスポンスに中国語の文字が含まれており、解析時に文字化けして表示される

高洛峰
リリース: 2016-10-11 08:58:24
オリジナル
1682 人が閲覧しました

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 ページとサーバー上の中国語の文字化けの問題は完全に解決できます。文字化けは、エンコードとデコードに使用されるコーディング テーブルの違いが原因であることを覚えておいてください。同じコーディングテーブルを使用すると問題が解決します。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート