java 中文乱码

以我做一个例子:

总共三个文件,

1、ajax.html

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>ajax.html</title>
    <script type="text/javascript" src="jslib/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="jslib/verfy1.js"></script>
    </head>
  <body>
  用户名检验:请输入姓名</br>
   <input type="text" id="userName" />
   <input type="button" value="检验" onclick="verfy()"/>
   <div id="result"></div>
  </body>
</html>

 

2、AJAXServer.java

 

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.omg.CORBA.Request;

import sun.awt.datatransfer.DataTransferer.ReencodingInputStream;


public class AJAXServer extends HttpServlet {

 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
    try{
     response.setContentType("text/html;charset=utf-8");
     PrintWriter out = response.getWriter();
     Integer inte = (Integer)request.getSession().getAttribute("total");
     int temp = 0;
     if(inte == null){
      temp = 1;
     }else{
      temp = inte.intValue() + 1;
     }
     request.getSession().setAttribute("total", temp);
     String old = request.getParameter("name");   //  1、第一种方式的处理

     String name = new String(old.getBytes("iso8859-1"),"utf-8");    // 第一种方式的处理

//String old = request.getParameter("name");  第二种方法

//String userName = URLDecoder.decode(old,"utf-8"); 第二种方法

     if(old == null || old.length() == 0){
      out.println("用户名不能为空!!");
     }else{
  
      if(name.equals("liminghua")){
       out.println("用户名【"+name+"】已存在,请使用其它名称!,"+ temp);
      }else{
       out.println("用户名【"+name+"】尚未存在,可以使用!,"+temp);
      }
     }
    }catch (Exception e) {
    e.printStackTrace();
    }
 }
 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  this.doGet(req, resp);
 }

}

3、verify.js

 

/*

function verfy(){
 $.get("AJAXServer",{name:$("#userName").val()},function(data){$("#result").html(data)});
}

*/


function verfy(){
  var url = "AJAXServer?name=" + encodeURI($("#userName").val());  // 第一种方式处理结果

//var url = "AJAXServer?name=" +encodeURI(encodeURI($("#userName").val()));  第二种方法
 url = convertURL(url);
 $.post(url,null,function(data){$("#result").html(data)
});
}
function convertURL(url) {  
   var timstamp = (new Date()).valueOf();  
   if (url.indexOf("?") >= 0) {  
     url = url + "&t=" + timstamp;  
   } else {  
     url = url + "?t=" + timstamp;  
   }  
   return url;  
  }

 

解决中文乱码问题
 1、页面端发送的数据作一次encodeURI,服务级使用new String(old.getBytes("iso8859-1"),"utf-8");

发送页面:(传送数据端)

    encodeURI($("#userName").val());

服务器端:

String old = request.getParameter("name");

String userName= new String(old.getBytes("iso8859-1"),"utf-8");
 2、页面端作两次encodeURI,服务器端URIDecoder.decode(old,"utf-8");

发送页面:(传送数据端)

 encodeURI(encodeURI($("#userName").val()));

服务器端:

String old = request.getParameter("name");

String userName = URLDecoder.decode(old,"utf-8");

这是通用的两种方法,完毕

posted @ 2013-04-17 16:27  Struts-pring  阅读(236)  评论(0编辑  收藏  举报