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编码,发给浏览器。
因为请求头和响应头里不允许有中文。
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"));
1、对于POST提交,可以设置request.setCharacterEncoding("utf-8");
只对请求中实体内容部分起作用
2、set提交,先将乱码的字符按照iso8859-1码表进行编码,编成二进制字节数组(=原请求参数值按照utf-8编码的二进制字节数组),再用utf-8解码。
String username = request.getParameter("username");
username = new String(username.getBytes("iso8859-1"),"utf-8");
上面两行代码对post提交有效。
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打给浏览器的数据会乱码。
<%@ page pageEncoding=”utf-8” %>
[ pageEncoding="utf-8" ] 服务器翻译jsp时使用的编码集.如果想防止jsp乱码,应该保证文件的保存编码和jsp翻译成servlet用的编码以及输出到浏览器后浏览器打开的编码一致.此属性一旦设置好,翻译引擎会间接帮我们设置content-type属性. myeclipse会智能设置保存文件的编码与翻译的编码一致。
1、查看系统与数据库服务器之间联系的编码方式
show variables like ‘character%’;
2. 修改系统与数据库服务器的编码
set names gbk; 与客户端有关系的编码方式都变成了GBK;