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

[经验分享] tomcat中文乱码问题的解决

[复制链接]

尚未签到

发表于 2018-11-29 13:21:25 | 显示全部楼层 |阅读模式
  第一,存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。
  从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。
  从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。
  第二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是eclipse的聪明之处。
  第三,
  pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致(所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet。
  contentType="text/html;"表示当浏览器得到此文件时以什么方式解码。例如:
  
  
  
  
  test
  
  
  我是个好人
  
  
  会产生乱码,因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。
  至此,页面应为:
  
  
  
  
  中文问题
  
  
  
  第四,
  request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
  response.setCharacterEncoding("UTF-8")可以把页面中的换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。
  第五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = newString(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
  1,post提交的数据:
  程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
  
  encodingFilter
  org.springframework.web.filter.CharacterEncodingFilter
  
  encoding
  UTF8
  
  
  forceEncoding
  true
  
  
  
  encodingFilter
  *.html
  
  
  encodingFilter
  *.jsp
  
  因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.
  特别注意:
  a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
  在这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法就是把这个过滤器尽量靠前放.

  b,在server.xml中不能加上  这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
  如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/)
  2,get提交的数据:
  两种情况:
  a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
  new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
  取出
  b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
  content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
  
  
  加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
  如果content="text/html; charset=GBK",需用
  new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
  取出,其他情况类似.
  总结:
  1,所有页面使用utf8编码,
  2,服务器加上过滤器,
  3,server.xml中不要使用

    4,server.xml文件加上useBodyEncodingForURI="true"
  这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
  从这里输入.
  第六,连接数据库
  1、mysql配置文件:
  修改mysql在windows\my.ini里default-character-set=utf-8
  2、mysql里数据库和表也都设为utf8_unicode_ci
  3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
  注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&
  来源:http://www.blogjava.net/renyangok/articles/67825.html


运维网声明 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-641205-1-1.html 上篇帖子: tomcat脚本分类 下篇帖子: Tomcat连接器选择
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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