Servlet乱码
文章目录
【注意】最后更新于 November 6, 2015,文中内容可能已过时,请谨慎使用。
最近学长分配了一个小任务,让做个微信公众号,想想就是一个servlet就够了,就开始做吧,结果不做没发现,一做发现问题太多了。 其中问题最大的就是中文乱码问题。
和学长研究了一下午都没找到具体什么地方出的问题,各种百度,什么方法都尝试过了,结果都解决不了。
甚至怕由于jdk的io不对又重新从官网下载了jdk。真心无语了!
最后无奈,我脱离了idea,试了试eclipse,然后发现乱码问题竟然神奇的解决啦!
想想eclipse绝对比idea高明不到那去啊,凭什么idea就不行?
最后发现错的很无语!
不过还好,这一次错算是长了很多经验,对于乱码的问题认识又深刻了点吧。
服务器端
我的错误的主要在这,
idea默认的文件编码是gbk,而项目编码是utf-8,
我设置的全部编码都是utf-8,在保存文件的时候编码就相当于错了。
总的来说,希望对于使用idea的用户提个醒吧,不要像我迷茫这么长时间。
以上主要是系统设置的编码原因,还有很多是软件设置的原因。
|
|
总的来说,再doPost方法使用以上的几个差不多就能够将乱码问题解决了,不过还有可以注意的地方。
在查询资料的时候发现使用ServletOutputStream输出不会受到编码的影响,没有具体尝试,流是字节方式,应该会比writer字符编码处理的好吧。
希望有大神可以说一说。
还发现有说适应filter过滤的,如果本身文件编码就有问题,过滤也不行,不过对于其他情况或许可以解决。
过滤的部分代码如下
什么情况,总是自动加上html符号,看的时候注意无视她
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
package wechat; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.IOException; @WebFilter(filterName = "FilterMain") public class FilterMain implements Filter { private String encoding; public void destroy() { } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { arg0.setCharacterEncoding(encoding); HttpServletRequest req = (HttpServletRequest) arg0; String type = req.getHeader("Content-Type"); if (type == null || !type.startsWith("multipart/form-data")) { arg2.doFilter(arg0, arg1); } else { HttpServletRequestWrapper multi = new HttpServletRequestWrapper(req); req.setCharacterEncoding(encoding); arg2.doFilter(multi, arg1); } } public void init(FilterConfig filterConfig) throws ServletException { encoding = filterConfig.getInitParameter("encoding"); } } |
代码是从网上看到的,希望对于同学有帮助。 另外要在web.xml加上
|
|
客户端
在客户端获取服务器信息的时候可以将获取的信息用utf-8显示,缓冲流的方式如下主要代码
|
|
还有对于StringBuffer的如下,也是使用utf-8的方式
|
|
总的来说错误很简单,但是不注意到确实挺难解决,希望对于同样无法解决的有一定的帮助吧。