2019年3月13日 21:53:04
今天遇到这样的问题, 有关于Java的charset. 当jsp已设置charset及pageEncoding为utf8后, 对应界面出现了中文在界面上变为问号的情况. 记录一下解决办法.
背景: servlet3.1+jsp+tomcat85+eclipsePhoton
现象: jsp设定了charset以及paeEncoding为utf8后, 仍然中文变成问号, 查看页面信息, page info显示页面text Encoding为windows-1252, 浏览器控制台显示response对象的charset=ISO-8859-1, 所以相当于jsp页面的charset设置没有起作用.
线索: 几经辗转, 发现问题在servlet上, servlet是有系统自动创建的, 每一个自动创建的servlet类都带有这么一行: response.getWriter().append("Served at: ").append(request.getContextPath());
其中的getWriter()方法的说明如下: Returns a PrintWriter object thatcan send character text to the client.The PrintWriter uses the characterencoding returned by getCharacterEncoding.If the response's character encoding has not beens pecified as described in getCharacterEncoding(i.e., the method just returns the default value ISO-8859-1), getWriterupdates it to ISO-8859-1.
所以线索已经很清晰, 因为在servlet中调用了response的getWriter方法, 而getWriter方法会在response对象没有被设置character encoding的话, getWriter会自动将其设置为ISO-8859-1.
解决方案:去掉这一行固然是解决办法, 但还有另外一种迎面而上的方式: 为response手动设置character encoding, 在getWriter上一行, 加上 response.setCharacterEncoding("UTF-8");
或 response.setContentType("text/html;charset=utf-8");
即可解决
但问题虽然解决, 这只是一个问题点, 由这个点,带来的是一个知识面的问题, 比如: