现在的位置: 首页 > 综合 > 正文

Servlet乱码解决

2017年03月28日 ⁄ 综合 ⁄ 共 1628字 ⁄ 字号 评论关闭

中文乱码处理

发生中文乱码有三种情况

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)解决.

 

抱歉!评论已关闭.