欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java web开发中文乱码全面解决攻略  

程序员文章站 2022-06-06 18:19:46
...


   作为工作多年的老鸟,遇到了很多中文乱码问题,但是总是通过google和try again and again的方式解决,大部分是通过设置new String的两个参数,用iso--8859-1, gb2312,gbk,utf-8相互转化来解决。至于原理是不了解的,下次遇到还是需要google。最近有同事又遇到中文乱码问题,通过new String解决后,下决心弄明白中文乱码的前因后果。


常用的编码如下:

iso--8859-1;

GB2312;

GBK;

UTF-8.


JSP页面可以设置字符集的地方至少有下面两处的地方:

 

 
java web开发中文乱码全面解决攻略
            
    
    
         
 

 

pageEncoding属性说明该jsp在web服务器编译成class的编码方式,<meta content="utf-8">是说明浏览器需要用什么编码来解析该html文件。

 
java web开发中文乱码全面解决攻略
            
    
    
         
      

 

POST方式:

       参数是作为http的body来提交的,pageEncoding属性指定了提交到服务器的编码字符集。服务器端的tomcat默认是以 iso--8859-1字符集来解码,可以通过方法:

request.setCharacterEncoding("字符集");

来指定字符集来解码参数。jsp的pageEncoding和服务器端的 request.setCharacterEncoding字符集必须一致,否则就会产生乱码。

比如:上面的JSP的pageEncoding="UTF-8",服务器端就必须用 request.setCharacterEncoding("UFT-8")来指定接受字符集,然后用request.getParameter("参数")来接收参数,这样就不会出现中文乱码。

一般服务器端通过写一个filter来设置 request.setCharacterEncoding("UFT-8")达到简化的目的,比如spring的filterorg.springframework.web.filter.CharacterEncodingFilter。

 

  POST的方式的http文件头如下


java web开发中文乱码全面解决攻略
            
    
    
         
 

 

http的body如下:


java web开发中文乱码全面解决攻略
            
    
    
         
 

 

 

GET方式:

假如没有指定jsp的form标签的method的属性,默认提交就是GET方式提交。或者直接指定属性method=“GET”。


java web开发中文乱码全面解决攻略
            
    
    
         
 

GET方式提交参数是作为url的参数来提交的,而不是http的body。服务器端的方法request.setCharacterEncoding("UTF-8");对于GET方式提交的参数没有作用。因为servlet规范文档里面提到该方法的作用范围。

 

Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader().

 

可以看出对于get方法他是无能为力的。那如何对GET方式提交的参数指定编码呢,可以在服务器里设置,tomcat可以如下设置:

 

  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

 

URIEncoding属性设置了GET提交的参数的编码方式,假如不设置的话,默认是用 iso--8859-1来解码,

设置的URIEncoding属性必须跟JSP页面的pageEncoding指定的字符集一致,和<meta content="utf-8">的设置无关。

 

GET方式的http的文件头是:


java web开发中文乱码全面解决攻略
            
    
    
         
 

 

http的body的内容是空:

 
java web开发中文乱码全面解决攻略
            
    
    
         
 

 

 

 

 

 

  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 24.2 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 7.1 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 2.6 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 32.1 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 21.9 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 35.8 KB
  • java web开发中文乱码全面解决攻略
            
    
    
         
  • 大小: 23.9 KB