当ajsx出现乱码时,请检查以下几点
1/ 连接数据库的编码:
static private String strUrl = "jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf-8";
2/ web-inf/web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>xx.center.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
当然SetCharacterEncodingFilter.java(tomcat目录下有源文件,直接拷过去就行)要放在相应的位置
3/ajax所在页面
request.open("GET",encodeURI(encodeURI(url)), true);//**********两次encodeURI是关键**********
request.setRequestHeader( "Content-Type", "text/html;charset=UTF-8" );
4/接收后台要解码:
sortname = java.net.URLDecoder.decode(sortname, "UTF-8");
检查以上几点,基本就这样。
////////////////////////
小注:由于我的产品要集成到另外一个环境为gb2312的编码当中.只能将相关编码方式从utf-8转成gb2312,
折腾我一晚上.现记录下来.
///
1、将以上注释的各个地方utf-8更改成gb2312.
2、将server.xml的<Connector..... URIEncoding="gb2312" useBodyEncodingForURI="true"/>
3、编写转换代码:
package cn.***.center;
public class utf8Togb2312 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public String utf8Togb2312(String str){
StringBuffer sb = new StringBuffer();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char)Integer.parseInt(
str.substring(i+1,i+3),16));
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
// Undo conversion to external encoding
String result = sb.toString();
String res=null;
try{
byte[] inputBytes = result.getBytes("8859_1");
res= new String(inputBytes,"UTF-8");
}
catch(Exception e){}
return res;
}
}
在需要调用的地方加上
utf8Togb2312 uTog=new utf8Togb2312();
String sortname =uTog.utf8Togb2312(request.getParameter("sortname"));
这时,sortname就成功由utf8转码成gb2312
//
以下是gb2312转utf8。以备后用。
package cn.***.center;
import java.io.UnsupportedEncodingException;
public class gb2312Toutf8 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
public String convertString(String gbk){
String utf8 = "";
try {
System.out.println("是我输出的内容gbk:"+gbk+"<p>");
utf8 = new String(gbk2utf8(gbk),"UTF-8");
System.out.println("是我输出的内容utf8:"+utf8+"<p>");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return utf8;
}
public byte[] gbk2utf8(String chenese) {
char c[] = chenese.toCharArray();
byte[] fullByte = new byte[3 * c.length];
for (int i = 0; i < c.length; i++) {
int m = (int) c[i];
String word = Integer.toBinaryString(m);
StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
for (int j = 0; j < len; j++) {
sb.append("0");
}
sb.append(word);
sb.insert(0, "1110");
sb.insert(8, "10");
sb.insert(16, "10");
String s1 = sb.substring(0, 8);
String s2 = sb.substring(8, 16);
String s3 = sb.substring(16);
byte b0 = Integer.valueOf(s1, 2).byteValue();
byte b1 = Integer.valueOf(s2, 2).byteValue();
byte b2 = Integer.valueOf(s3, 2).byteValue();
byte[] bf = new byte[3];
bf[0] = b0;
fullByte[i * 3] = bf[0];
bf[1] = b1;
fullByte[i * 3 + 1] = bf[1];
bf[2] = b2;
fullByte[i * 3 + 2] = bf[2];
}
return fullByte;
}
}