2019年3月13日 21:53:04html
今天遇到这样的问题, 有关于Java的charset. 当jsp已设置charset及pageEncoding为utf8后, 对应界面出现了中文在界面上变为问号的状况. 记录一下解决办法. windows
背景: 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");
便可解决浏览器
但问题虽然解决, 这只是一个问题点, 由这个点,带来的是一个知识面的问题, 好比:tomcat