通过jquery ajax传值,后台出现中文乱码,经过一番摸索后发现原来客户端浏览器通过get方式传递到项目后台时,编码格式是ISO-8859-1,需要我们在后台经过转码才能正常使用。方法如下:
str = new String(str.getBytes("ISO-8859-1"), "utf-8");
需要注意的是,如果在本地测试,后台解析的默认字符编码是gb2312,则不需转码,因此代码修证为:
if(!StringUtil.getEncoding(str).equalsIgnoreCase("GB2312")){
str = new String(str.getBytes("ISO-8859-1"), "utf-8");
}
StringUtil类如下:
package com.hwcampus.common;
public final class StringUtil {
public static boolean isEmpty(String str) {
if (str != null && !str.trim().isEmpty()) {// 如果字符串不为null,去除空格后值不与空字符串相等的话,证明字符串有实质性的内容
return false;//不为空
}
return true;//为空
}
private StringUtil() {
}
/**
* 判断字符串的编码类型
* @param str
* @return
* author htc
*/
public static String getEncoding(String str) {
String encode = "GB2312";
if(isEmpty(str)) return "";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s = encode;
return s;
}
} catch (Exception exception) {
}
encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s1 = encode;
return s1;
}
} catch (Exception exception1) {
}
encode = "UTF-8";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s2 = encode;
return s2;
}
} catch (Exception exception2) {
}
encode = "GBK";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return "";
}
}