我是初学者, 跟着视频做练习, 发现视频里能正确输出的汉字, 到我这里就是怎么都乱码..
发现网上找不到现成的完整解决办法, 遂自己查文档做试验
折腾了一晚上, 在我目前接触的编码范围里, 算是解决了
环境 MyEclipse2014+tomcat8.0,+Java1.7.0_45
-----------------分割线------------------
学习了新的知识, 使用Filter, 在Filter的doFilter()方法中加入
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
就可以不用在每个Servlet中都使用以下的代码了, Filter在所有执行前自动更改~
但若网页本身又定义了新的编码方式, 则会覆盖整个Filter的结果, 故要删除网页中的编码方式设置的相关代码
另外, Filter会根据web.xml中的顺序来过滤, 为了防止在别的Filter中就跳转了, 务必把EncodingFilter放在第一个
-----------------分割线完------------------
我做的练习: 写一张表单, 获取表单对应的信息, 并在一个新的网页中输出(此处用是在Servlet中用out.println("html的代码")来形成一个网页的....感觉这个是不是太过时...)
出现的问题: 1.html中的表单页面的中文乱码
2.表单中填写的中文, 在新输出的网页中也是乱码
解决的方法:
首先, 把MyEclipse-Window-preference 中全部和编码有关的东西都改成UTF-8, 网上很多教程, 就不累述了
然后, html网页中head部分里通常写成是
<meta name="content-type" content="text/html; charset=UTF-8">
改成两条, 写在一条里他就识别不了分号后面的东西, 但是也不报错或警告 (我也不知道为什么会这样, 试出来的)
<meta name="content-type" content="text/html">
<meta charset="UTF-8">
问题1解决
最后, 在Servlet的service(doGet或者doPost, 看你用哪个了)方法中写上
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
将req和resp的信息都进行编码格式的规范~
尤其是第一条, 视频里没写, 加上后就解决了问题2, 即从表单获得的填入值中的中文在新网页输出时不再乱码
与上一条不一样的是, 在Java里能将text/html和charset=UTF-8写在一句里且有效
纯属记录一下自己的研究心得, 希望对看到的人有帮助 ^_^