设为首页 收藏本站
查看: 1105|回复: 0

[经验分享] tomcat设置编码格式utf8

[复制链接]

尚未签到

发表于 2017-12-25 21:33:09 | 显示全部楼层 |阅读模式
  一:form在前台以post方式提交数据:
  浏览器将数据(假设为“中国”)发送给服务器的时候,将数据变成0101的二进制数据(假设为98 99)时必然要查码表,浏览器以哪个码表打开网页,浏览器就以哪个码表提交数据。数据到达服务器后,数据(98 99)要封装到request中,在servlet中调用Request的getParameter方法返回的是字符串(“中国”),方法内部拿到数字后要转成字符,一定要查码表,由于request的设计者是外国人,所以默认查的是他们常用的ISO8859-1,这就是请求数据产生乱码的根源。




DSC0000.gif


package com.yyz.request;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//以post方式提交表单
public class RequestDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//请求数据的中文乱码问题
request.setCharacterEncoding("UTF-8");//客户端网页我们控制为UTF-8
String username = request.getParameter("username");
//获取数据正常,输出数据时可以查阅不同码表
response.setCharacterEncoding("gb2312");//通知服务器发送数据时查阅的码表
response.setContentType("text/html;charset=gb2312");//通知浏览器以何种码表打开
PrintWriter out = response.getWriter();
out.write(username);
}  
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}



  二:form在前台以get方式提交数据:
  get方式提交的数据依然是浏览器用什么码表打开就用什么码表发送。不同的是,以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1。得到(? ?),要解决这个问题,需要拿着(??)反向查ISO8859-1,拿到(98 99)后,再去查正确码表。







1 package com.yyz.request;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10 //以get方式提交表单
11 public class RequestDemo extends HttpServlet {
12
13     public void doGet(HttpServletRequest request, HttpServletResponse response)
14             throws ServletException, IOException {
15          //请求数据的中文乱码问题
16         request.setCharacterEncoding("UTF-8");//以get方式提交数据时,request设置编码无效。即使设置了UTF-8还是会去查ISO8859-1
17         String username = request.getParameter("username");
18        System.out.println(username);
19         byte source [] = username.getBytes("iso8859-1");
20         username = new String (source,"UTF-8");
21         System.out.println(username);
22         
23 }  
24
25     public void doPost(HttpServletRequest request, HttpServletResponse response)
26             throws ServletException, IOException {
27         doGet(request,response);
28 }
29
30 }



  三:提交数据中文乱码问题总结:
  1.如果提交方式为post,想不乱码,只需要设置request对象的编码即可。
  注意:客户机数据是以哪种方式提交的,request就应该设成什么编码。
  2.如果提交方式为get,设置request对象的编码是无效的,想不乱码,只能手工转换。
  String data = "???????";//乱码字符串
     byte source [] = data.getBytes("iso8859-1");//得到客户机提交的原始数据
     data = new String (data.getBytes("iso8859-1"),"UTF-8");//解决乱码
  //等同于
  data = new String (source,"UTF-8");
  3.get方式的乱码,还可以通过更改服务器配置的方式实现。更改Tomact的conf目录下的server.xml文件。
  3.1    DSC0001.png 这种方式并不推荐,因为更改了服务器且并不灵活。
  3.2 DSC0002.png 这么设置后,request的setCharacterEncoding设置什么编码,连接器就用什么编码,虽然比上一种更改灵活,但依然会导致我们的应用程序牢牢依赖于服务器,也不被推荐。
  四:最后的最后,提一个小细节:URL地址后面如果跟了中文数据,一定要经过URL编码。表单提交的参数有中文数据,浏览器会自动帮我们编码,但如果是通过链接直接带中文参数,浏览器是不会帮我们编码的,这时想通过上述第二种方式解决中文乱码问题就时灵时不灵了,应该通过URLEncoding.encode(,"UTF-8")先编码。
  新配置一个spring的MVC项目,发现对Get请求的中文参数出现了乱码:
DSC0003.jpg

  查看了SpingMVC中关于编码的配置(在web.xml中),如下






[html] view plain copy


https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg

  • <filter>  
  •     <filter-name>encodingFilter</filter-name>  
  •     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  •     <init-param>  
  •         <param-name>encoding</param-name>  
  •         <param-value>utf-8</param-value>  
  •     </init-param>  
  •     <init-param>  
  •         <param-name>forceEncoding</param-name>  
  •         <param-value>true</param-value>  
  •     </init-param>  
  • </filter>  

  • <filter-mapping>  
  •     <filter-name>encodingFilter</filter-name>  
  •     <servlet-name>appkit</servlet-name>  
  • </filter-mapping>  
  

  
应该不是Spring的问题,应该是Tomcat的问题,然后去修改Tomcat的配置文件server.xml,添加URIEncoding="UTF-8"






[html] view plain copy


https://code.csdn.net/assets/CODE_ico.pnghttps://code.csdn.net/assets/ico_fork.svg

  • <Connector port="8080" protocol="HTTP/1.1"  
  •            connectionTimeout="20000"  
  •            redirectPort="8443"  
  •            URIEncoding="UTF-8"/>  
  
然后就好了
DSC0004.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-428038-1-1.html 上篇帖子: tomcat配置jndi+spring使用jndi数据源 下篇帖子: 【Tomcat】tomcat配置文件详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表