当ajsx出现乱码时,请检查以下几点

当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;
}


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值