JAva開発における各種中国語文字化けし問題解決策

5972 ワード

一、request取得フォーム提出中国語データの文字化けし問題の解決

  • post提出方式中国語処理方法
      post form , request ,request  iso8859-1, , request , 
    
  •     request.setCharacterEncoding("utf-8");

    2、get提出方式中国語の処理方法get提出方式には4種類の処理方案がある
  • tomcatのプロファイルを変更*tomcat({tomcat}confserver.xml)のserverを見つけます.xml、ポートを変更する場所を見つけて、属性URIEncoding="utf-8"
  • を追加します.
    <Connector port="80" protocol="HTTP/1.1"       connectionTimeout="20000" redirectPort="8443“ URIEncoding="utf-8"/>
  • まずデータを符号化し、さらに復号
  • を行う.
              String username=" ";
               username = URLEncoder.encode(username, "utf-8");
               System.out.println("URLEncoder="+username);
               username = URLDecoder.decode(username, "utf-8");
               System.out.println("URLDecoder="+username);
  • stringの構造を用いて符号化を完了する(この比較はよく用いられる)
  • username = new String(username.getBytes("utf-8"),"utf-8");
  • htmlのheadに直接コードセット(単純暴力)
  • を指定する
     <meta charset="utf-8">

    二、responseがページに中国語の文字化けし問題を出力する解決

     1)、 ** **
        *   , , ,  , 
    
    // 
        response.setHeader("Content-Type", "text/html;charset=utf-8");
        // 
        response.getOutputStream().write(" ".getBytes("utf-8"));

    2)文字を使ってページに向かって中国語を出力する*文字を使ってページに向かって中国語を出力すると必ず文字化けしが発生する
         , : response , ,  response  iso8859-1,   , response , , ok 。
    
    // response 
        response.setCharacterEncoding("utf-8");
        // 
        response.setHeader("Content-Type", "text/html;charset=utf-8");
        // 
        response.getWriter().write(" ");

    コードを1行簡単に書くことができます.
    response.setContentType("text/html;charset=utf-8");

    *注意:バイトストリームと文字ストリームはページに出力され、同時に使用できません(反発).文字ストリームを使用すると、ページに直接数値を出力ことはできません(デフォルトではresponse.getoutputStream()などのASCIIが使用されます.write(97); の出力結果は文字a)

    三、ファイルをダウンロードする時、中国語のファイル名の文字化けしの問題の解決

     , 。IE url , base64 , , 
    
    request.getHeader("User-Agent");

    リクエストヘッダからブラウザのタイプを取得し、次の操作を行います.
    // , User-Agent
        String agent = request.getHeader("User-Agent");
        // 
        if(agent.contains("Firefox")) {
            // base64 
            filename = "=?UTF-8?B?"+
                new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
        } else {
            //ie url 
            filename = URLEncoder.encode(filename, "utf-8");
        }

    注意:ファイルのダウンロードは下の情報で設定する必要があります.ファイルがどんなフォーマットであっても、ブラウザに直接表示されることなくダウンロードで開きます.
    response.setHeader("Content-Disposition", "attachment;filename="+filename);

    まとめ


    個人的には、フレームワークが使いやすく、基礎が重要だと思います.