在Servlet的response输出时,若输出的内容是UTF-8编码,则应设置
response.setContentType("text/html;charset=UTF-8");
也就是说必须指定contentType,Web Server才能按正确的编码输出内容。。。
然后再response.getWriter().write(e.getMessage());
但是response.getOutputStream().print依然有乱码,因为outputstream是输出流,并不对编码进行处理。。
而getWriter则有对编码进行再处理。。。
/* get encoding from Content-Type header */
String encoding = getCharacterEncoding();
if (encoding==null && _servletHttpRequest!=null)
{
/* implementation of educated defaults */
String mimeType = _httpResponse.getMimeType();
encoding = _servletHttpRequest.getServletHandler()
.getHttpContext().getEncodingByMimeType(mimeType);
}
if (encoding==null)
// get last resort hardcoded default
encoding = StringUtil.__ISO_8859_1;
上面内容是Jetty的getWriter一个实现。。默认下使用的编码是iso-8859-1
转自:http://hi.baidu.com/wadise/blog/item/771fa8ecd1d0112263d09fed.html