中文乱码处理
发生中文乱码有三种情况
1.表单
1)Post
解决方法:request.setCharacterEncoding("UTF-8");
2)Get
解决方法一:
String u=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8")
因为get方法和post方法不一样,post方法是通过对象域传过来的,get方法参数时通过表头传递过来的,这样我们就要将请求的字符编码转换一下
解决方法二:写一个工具类
package com.wfc.utils;
import java.io.UnsupportedEncodingException;
public class MyTools {
public static String getNewString(String str){
String newString="";
try {
newString= new String(str.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newString;
}
}
然后在接收的时候将接收过来的数据的编码格式转换一下即可。
String u=request.getParameter("username");
System.out.println("u="+MyTools.getNewString(u));
2.超链接:
<a href=”http://www.sohu.com?name=”函数”>测试</a>
<a href="/encoding/GetInfoServlet?username=吴彩霞"/>汪方晨</a>
该方法和GET处理方法一样,一模一样。
3.sendRedirect()发生乱码 如response.sendRedirect(“servlet地址?Username=”汪方晨”);
//把它接收到的数据传递给下一个页面
response.sendRedirect("/encoding/Wel?yy="+u);
在另外的一个Servlet中:
String u=request.getParameter("yy");
System.out.println("u="+MyTools.getNewString(u));
Post:工作原理图:
浏览器发送request请求到服务器,浏览器编码为UTF-8,服务器的默认编码是ISO-8859-1,所以post的问题就是出在这里,我们 必须让web服务器接收到正确的编码UTF-8.(具体来说是处在接收的过程中,回送的过程暂不考虑)
特别:在表单提交的时候尽量用post不要用post,当时超链接的时候没办法,默认的是GET。
(post安全,传输的数据量又大)
小知识点:在Servlet中
System.out.println("u="+MyTools.getNewString(u));代表在服务器端的输出内容
下面这行表示在浏览器上显示内容。(在浏览器端响应)
response.getWriter().println("yy="+MyTools.getNewString(u));
下面这行,表示响应的类型,并设置了编码格式utf-8(一定要设置这个格式)
response.setContentType("text/html;charset=utf-8");
*在服务端是中文,在response的时候(回送的时候),也要考虑浏览器显示是否正确,一般我们通过response.setContentType(“text/html;charset=utf-8”)解决.