服务器响应和浏览器请求产生乱码问题详述
2017-05-09 15:07
183 查看
在解决乱码问题之前要先了解编码集的概念
编码集:
1、作用:让数字与字符产生映射关系
2、不同的编码集能映射的字符也不同
3、不同的编码集中相同的字符可能对应的数字也不一样
代码演示产生乱码的原因
总结:由于操作字符时,编码不统一造成乱码现象
1、服务器响应时出现乱码问题,
Eclipse采用的是UTF-8的编码,TomCat服务器默认的是ISO-8859-1编码,浏览器默认的是GBK编码,如下图所示:
注意: 以字符为标准传输数据时,会产生数据丢失,数据丢失就会编码失败,进而乱码
2、服务器请求时出现乱码问题
编码集:
1、作用:让数字与字符产生映射关系
2、不同的编码集能映射的字符也不同
3、不同的编码集中相同的字符可能对应的数字也不一样
代码演示产生乱码的原因
public class Demo1 { public static void main(String[] args) throws IOException { String str = "中"; // 字符 转换成字节 byte[] b1 = str.getBytes("UTF-8"); byte[] b2 = str.getBytes("GBK"); System.out.println(Arrays.toString(b1));// 结果是[-28, -72, -83] System.out.println(Arrays.toString(b2));// 结果是[-42,-48] // 用UTF-8编码表将字节转换成字符 byte[] b3 = new byte[] { -28, -72, -83 }; String str2 = new String(b3, "UTF-8"); System.out.println(str2);// 结果是:中 // 用GBK编码表将字节转换成字符 String str3 = new String(b3, "GBK"); System.out.println(str3);// 结果是:涓? //场景1:编码集不一样,比如IO操作(在根目录下创建一个编码模式是UFT-8的文本文件 存放:“中”) InputStream in=new FileInputStream("test.txt"); byte[] buffer=new byte[1024]; int length=in.read(buffer); String str4 = new String(buffer,0,length,"UTF-8"); System.out.println(str4); /*场景2:编码集不一样,但是没有乱码 比如默认GBK的eclipse向默认UTF-8的mysql中写入中文数据,不会产生乱码 因为Mysql自己做了处理: Eclipse(GBK): "中" ------ [-42,-48] Mysql:1、将字节按照GBK编码表转换成字符new String([-42,-48],"GBK") ----"中" 2、将"中"按照UTF-8 解析成字节[-28, -72, -83]; 3、存储解析后的字节 */ } }
总结:由于操作字符时,编码不统一造成乱码现象
1、服务器响应时出现乱码问题,
Eclipse采用的是UTF-8的编码,TomCat服务器默认的是ISO-8859-1编码,浏览器默认的是GBK编码,如下图所示:
注意: 以字符为标准传输数据时,会产生数据丢失,数据丢失就会编码失败,进而乱码
解决方式 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置服务器编码集 response.setCharacterEncoding("UTF-8"); //设置浏览器编码集 response.setHeader("content-type","text/html;charset=UTF-8"); response.getWriter().print("你好!");//浏览器界面输出中文:你好! } 注意:
response调用setHeader时,默认调用了setCharacterEncoding方法,所以在程序中,可以省略设置服务器编 码集的方法。
2、服务器请求时出现乱码问题
//告诉Tomcat不要使用默认的ISO-8859-1 而是使用UTF-8 //Post方式解决乱码 request.setCharacterEncoding("UTF-8"); String word = request.getParameter("word"); System.out.println("word"); //控制台打印“中” //get方式解决乱码 byte[] bytes = request.getParameter("word").getBytes("ISO-8859-1"); String str=new String(bytes,"UTF-8"); System.out.println(str); //控制台打印“中”
相关文章推荐
- 解决springMVC在浏览器请求数据时产生的乱码问题
- 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
- 关于服务器响应,浏览器请求的理解以及javaWeb项目的编码问题
- Tomcat在处理GET和POST请求时产生的乱码问题
- 浏览器自动转换URL编码产生乱码问题
- Android 向服务器发送get请求乱码问题
- 关于HttpClient模拟浏览器请求的参数乱码问题解决方案
- Android向服务器发送请求时的中文乱码问题
- Tomcat在处理GET和POST请求时产生的乱码问题
- 浏览器对于服务器favico.ico的请求问题
- 【安卓笔记】android客户端向tomcat服务器发送请求中文乱码问题解决
- 解决浏览器向服务器传递参数时中文乱码问题
- 由于浏览器版本造成的HttpServlet获取request请求对象中含中文乱码问题
- socket模仿浏览器发送http get请求,响应体乱码
- Tomcat在处理GET和POST请求时产生的乱码问题
- 浏览器自动转换URL编码产生乱码问题
- Android学习笔记:Android向服务器发送请求时的中文乱码问题
- 解决servlet响应用户中文请求信息的乱码问题
- Android学习笔记:Android向服务器发送请求时的中文乱码问题
- 浏览器刷新页面后向服务器发出两次请求的问题