http请求中的中文乱码问题

经过浏览器访问服务器页面和资源时,不可避免地要传送中文字串,若是客户机与服务器不能用同一码表解析字串,确定会出现各类各样的乱码问题。我总结了几个乱码场景及解决办法,以下html

一、服务器上的中文字串被客户端访问时出现的乱码问题浏览器

缘由:浏览器在解析中文时,不知道该用什么码表去解析,就会用默认的gb2312去解析,确定会出现乱码服务器

解决办法:以什么码表写入流,在响应的请求头里就告诉浏览器用什么码表,例子使用utf-8post

//告诉浏览器使用UTF-8码表解析
response.setHeader("Content-type","text/html;charset=UTF-8");//若是写成text/html,charset=UTF-8就会变成了下载,必定要当心
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data.getBytes("UTF-8)); //以UTF-8写入输出流
//告诉浏览器使用UTF-8码表解析
response.setHeader("content-type","text/html;charset=UTF-8");
//告诉response以什么码表向浏览器写出数据
response.setCharacterEncoding("UTF-8");
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data); 

上面两种方法的效果是同样的,除了上面两种写法,还有一种更简单的写法,效果同上。ui

//告诉浏览器使用UTF-8码表解析
//告诉response以什么码表向浏览器写出数据
response.setContentType("text/html;charset=UTF-8");
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write(data);

最后一种写法原理与上面三种不同,这是在html文档里经过meta标签告诉浏览器使用什么码表编码

//告诉浏览器使用UTF-8码表解析
String data="我是谁“;
OutputStream out = response.getOutputStream();
out.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
out.write(data.getBytes("UTF-8)); //以UTF-8写入输出流

 二、客户端提交中文到服务端致使的乱码url

缘由:客户端以UTF-8编码,服务端中的request以默认的Iso8859码表解析spa

解决办法:告诉request用UTF-8码表解析code

     下面咱们看看若是告诉request,因为get请求与post请求传参方式不同,所以在这分开举例server

      post请求解决方式

request.setCharacterEncoding("UTF-8");
String para = request.getParameter("username");

      get请求解决方式

String name= request.getParameter("username");
//以原来的编码解析再以UTF-8编码
name = new String(name.getBytes("iso8859-1"),"UTF-8");

注意:post请求处理方式对get请求无效,是由于在get请求中参数是在url路径中出现  

不过能够经过修改server.xml文件中配置编post请求处理方式适用于get请求,配置文件修改以下:

<Connector port="8080" protocol="HTTP/1.1"
            connectionTimeout="20000"
            redirectPort="8443"
            useBodyEncodingForURI="true"/>  //让URI编码方式与servlet中request的编码方式一致
相关文章
相关标签/搜索