八.javaweb之解决中文乱码问题
2017-04-23 22:56
435 查看
解决中文乱码问题
字符集
字符(Character)是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等。字符集(Characterset)是多个字符的集合。
[align=justify]任何数据在计算机内部实际上都是以二进制的形式保存的,所以我们看得见的字符本质上都是以二进制的形式保存的。而字符集实际上就是看得见的字符和二进制数之间的一张对应表。[/align]
[align=justify]汉字[/align] | [align=justify]编码方式[/align] | [align=justify]编码[/align] | [align=justify]二进制[/align] |
[align=center]‘中’[/align] | [align=justify]GB2312[/align] | [align=justify]D6D0[/align] | [align=justify]1101 0110-1101 0000[/align] |
[align=justify]UTF-16[/align] | [align=justify]4E2D[/align] | [align=justify]0100 1110-0010 1101[/align] | |
[align=justify]UTF-8[/align] | [align=justify]E4B8AD[/align] | [align=justify]1110 0100-1011 1000-1010 1101[/align] |
编码与解码
[align=justify]编码:将字符转换为二进制数[/align]‘中’
→ E4B8AD → 1110 0100-1011 1000-1010 1101
[align=justify]解码:将二进制数转换为字符[/align]
1110 0100-1011 1000-1010 1101 → E4B8AD → ‘中’
[align=justify]乱码:编码与解码使用的字符集不一致就会产生乱码。[/align]
如下图:使用 UTF-8 编码,使用GBK 解码
所以,解决乱码问题的根本方法就是统一编码和解码的字符集。
在Web应用中统一字符集
[align=justify]请求参数中含有中文[/align][align=justify]请求由浏览器发送给服务器[/align]
[align=justify]由浏览器编码[/align]
[align=justify]浏览器使用HTML页面指定的字符集编码,只需要将HTML页面的字符集指定为UTF-8即可[/align]
[align=justify]由服务器解码[/align]
[align=justify]默认字符集是IOS-8859-1[/align]
[align=justify]解决方案[/align]
[align=justify]对于POST请求:post请求在Servlet中解码,默认的字符集是ISO-8859-1,不支持中文,所以我们需要修改Servlet的字符集为UTF-8。使用request.setCharacterEncoding("UTF-8");设置request对象使用UTF-8字符集对请求体中的内容进行解码。但需要注意的是,这个操作一定要在调用getParameter()方法之前进行。[/align]
[align=justify]对于GET请求:GET请求是在URL地址栏中传递请求参数的,它会被Tomcat服务器自动解码,而Tomcat服务器默认的字符集也是ISO-8859-1,[/align]
所以我们需要修改Tomcat服务器的字符集为UTF-8。由于请求参数是包含在请求行内的,无法通过request对象进行设置,所以需要在Server.xml文件中修改Connector标签,添加URIEncoding="utf-8"属性。
在eclipse中的Tomcat镜像中修改即可生效。但如果将来删除当前Tomcat镜像,重新关联Tomcat,则会使设置失效,所以在Tomcat配置文件中最好也进行配置。
[align=justify]服务器响应中含有中文[/align]
[align=justify]响应由服务器发送个浏览器[/align]
[align=justify]由服务器编码[/align]
[align=justify]默认使用ISO-8859-1进行编码[/align]
[align=justify]由浏览器解码[/align]
[align=justify]默认使用GBK进行解码[/align]
[align=justify]解决方案[/align]
[align=justify]方法1:设置响应头[/align]
response.setHeader("Content-Type","text/html;charset=utf-8");
[align=justify]方法2:设置响应的内容类型[/align]
response.setContentType("text/html;charset=utf-8");
[align=justify]通过这种方式可以在响应头中告诉浏览器响应体的编码方式是UTF-8;同时服务器也会采用该字符集进行编码[/align]
[align=justify]但需要注意的是,两种方法一定要在response.getWriter()之前进行。[/align]
相关文章推荐
- Java WEB开发中的中文乱码问题解决之终极之道
- javaWeb利用Filter解决中文乱码问题
- 解决.NET 调用JAVA WEBService服务中文乱码问题
- java web 解决当get 请求时 中文乱码问题
- 【javaweb:Servlet】解决Servlet页面输出中文乱码问题
- java webservice 解决部分中文乱码问题
- java web中配置Filter解决jsp中文乱码问题
- 解决.NET 调用JAVA WEBService服务中文乱码问题
- javaweb开发中的中文乱码问题,使用Filter过滤器解决
- java web 解决中文乱码问题(全面总结)
- centos7 javaweb 链接中文请求tomcat乱码问题解决
- [Java Web]Struts2解决中文乱码问题
- java web 中文乱码问题,上传组件传参乱码解决
- 关于java web中get方法的解决中文乱码问题
- [Java Web]Struts2解决中文乱码问题
- JavaWeb 解决超链接参数中文乱码问题
- C# webclient中文乱码问题解决方法
- 解决java写xml中文乱码问题
- .Net web提交到后台中文乱码问题解决
- JAVA语言 mysql-connector-java 访问 Mysql中文乱码问题解决