JAvaプログラミング乱符号小談


JAvaプログラミングでは、文字セットを設定するときに、文字化けして問題が解決する方法がよくあります.例:
1、一般的なpostとgetのコミット:
 
psot    :(               )
 request.setCharacterEncoding("UTF-8");
 String name = new String(name.getBytes("ISO8859-1"), "UTF-8");//IE   GBK      chrome  UTF-8
get    :(    tomcatserver.xml,       。      )
String name = new String(name.getBytes("ISO8859-1"), "UTF-8");

 
 2、ダウンロード時に文字化けして、FFとIE、Chromeがまた違う:
 
String       strWenJianMing = new String(strWenJianMing.getBytes("ISO8859-1"), "UTF-8");

response.setContentType("application/x-msdownload;charset=utf-8");
String agent = request.getHeader("user-agent").toLowerCase();
 if(agent != null && agent.indexOf("firefox") >-1) {// FF      
     String enableFileName = strWenJianMing;
    try {
      enableFileName = "=?UTF-8?B?" + (new String(Base64.encode(strWenJianMing.getBytes("UTF-8")))) + "?=";
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }    
     response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName);    
 } else { // IE,chrome
    response.setHeader("Content-Disposition", "attachment; filename=" + getUTF8toString(strWenJianMing));
 } 

//uft-8    
public static String getUTF8toString(String s) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < s.length(); i++) {
      char c = s.charAt(i);
      if (c >= 0 && c <= 255) {
        sb.append(c);
      } else {
        byte[] b;
        try {
          b = Character.toString(c).getBytes("utf-8");
        } catch (Exception ex) {
          System.out.println(ex);
          b = new byte[0];
        }
        for (int j = 0; j < b.length; j++) {
          int k = b[j];
          if (k < 0)
            k += 256;
          sb.append("%" + Integer.toHexString(k).toUpperCase());
        }
      }
    }
    String s_utf8 = sb.toString();
    sb.delete(0, sb.length());
    sb.setLength(0);
    sb = null;
    return s_utf8;
  }

 
前回のプロジェクトで文字化けしが発生しました.ヘッドは符号化と復号化の方式で、バックグラウンドで1つの符号化が伝わって、提出した時にまた復号化します.プロジェクトでは本当に役に立ちました.文字化けしの処理を省くと、もちろん使えないところもあります.例えばget方式で符号化されていない中国語パラメータを渡すのは、フロントで符号を編成しない限りだめです.