1、向浏览器输出一段数据

响应的乱码

*response.setContentType("text/html;charset=utf-8");

同时设定服务器的字符集编码,浏览器所用的字符集编码。

response.setHeader("content-type", "text/html;charset=utf-8"); //指定浏览器utf-8解码

response.getOutputStream().write("中国".getBytes("utf-8"));  //设置服务器用utf-8编码

 

response对象默认以ISO8859-1将需要输出到浏览器的字符进行编码

response.setHeader("content-type", "text/html;charset=utf-8"); //指定浏览器utf-8解码//response.setCharacterEncoding("utf-8"); //设置服务器以此解码

response.getWriter().write("中国");

//服务器很智能,setHeader这个头里设置了utf-8,服务器也会按utf-8编码,发给浏览器。

2、设置下载文件的名称

因为请求头和响应头里不允许有中文。

URL编码,只会把assicii 码里没有的字符,按指定的码表(utf-8)编成的2进制,2进制再转成16进制数字的字符串,响应头里出现的字符是16进制的字符串。浏览器认识这个16进制的字符串,知道这是经过url编码之后传输过来的,所以浏览器自动解码,将这个16进制(utf-8)解码成正确的字符。

String content = URLEncoder.encode("哈哈", "utf-8")

String str = URLDecoder.decode(content, "UTF-8" ); //浏览器其实只会默认用utf-8解码的

 

//设置下载文件的名称,设置为“哈哈.jpg

        response.setHeader("Content-Disposition",   

                      "attachment;filename="+URLEncoder.encode("哈哈.jpg", "utf-8"));

 

3、服务器获取请求参数乱码解决:

1对于POST提交可以设置request.setCharacterEncoding("utf-8")

只对请求中实体内容部分起作用

 

2set提交先将乱码的字符按照iso8859-1码表进行编码,编成二进制字节数组(=原请求参数值按照utf-8编码的二进制字节数组),再用utf-8解码。

    String username = request.getParameter("username");

    username = new String(username.getBytes("iso8859-1"),"utf-8");

上面两行代码对post提交有效。

 

4、转发要注意的乱码

Demo3.java

  response.setContentType("text/html;charset=utf-8"); ①

  response.getWriter().write("呵呵Demo3");

  this.getServletContext().getRequestDispatcher("/servlet/Demo4").forward(request,response);

Demo4.java

  response.getWriter().write("哈哈哈Demo4^-^");

如果Demo3.java①和②顺序颠倒response的缓冲区的数据就先按默认的编码表编码了,Demo4.java打给浏览器的数据会乱码。

 

 

5JSP乱码 

<%@ page  pageEncoding=utf-8 %>

 

[ pageEncoding="utf-8" ] 服务器翻译jsp时使用的编码集.如果防止jsp乱码,应该保证文件的保存编码和jsp翻译servlet用的编码以及输出到浏览器后浏览器打开的编码一致.此属性一旦设置好,翻译引擎会间接帮我们设置content-type属性. myeclipse会智能设置保存文件的编码与翻译的编码一致。

 

6、客户端与mysql数据库服务器之间的乱码解决

1、查看系统与数据库服务器之间联系的编码方式

 show variables like character%;


2. 修改系统与数据库服务器的编码

set names gbk;  与客户端有关系的编码方式都变成了GBK