JAvaプログラミング乱符号小談
JAvaプログラミングでは、文字セットを設定するときに、文字化けして問題が解決する方法がよくあります.例:
1、一般的なpostとgetのコミット:
2、ダウンロード時に文字化けして、FFとIE、Chromeがまた違う:
前回のプロジェクトで文字化けしが発生しました.ヘッドは符号化と復号化の方式で、バックグラウンドで1つの符号化が伝わって、提出した時にまた復号化します.プロジェクトでは本当に役に立ちました.文字化けしの処理を省くと、もちろん使えないところもあります.例えばget方式で符号化されていない中国語パラメータを渡すのは、フロントで符号を編成しない限りだめです.
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方式で符号化されていない中国語パラメータを渡すのは、フロントで符号を編成しない限りだめです.