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;
}
上次项目中出现乱码问题。头说用编码和解码的方式,后台传一个编码过去,提交过来的时候又解码一次。在项目中还真拍上大用场。省去很多处理乱码的事情,当然有些地方还是不能用的。比如用get方式传递没有编码的中文参数还是不行的,除非在前台编好码。