非西欧语系乱码原因
在没有设置任何内容类型或编码之前,HttpServletResponse使用的字符编码默认是ISO-8859-1。也就是说,如果直接输出中文,在浏览器上就会看到乱码。
有两种方式可以修改HttpServletResponse输出的编码方式
方式一:设置response的setLocale
浏览器如果有发送Accept-Language标头,则可以使用HttpServletRequest的getLocale()来取得一个Locale对象,代表客户端可接受的语系。可以使用HttpServletResponse的setLocale()来设置地区(Locale)信息,地区信息就包括了语系与编码信息。语系信息通常通过响应标头Content-Language来设置,而setLocale()也会设置HTTP响应的Content-Language标头。
具体实现步骤:
(1)在web.xml中设置默认的区域与编码对应,如果不设置对应关系,编码方式不会变,还是默认的ISO-8859-1,设置示例在下面的web.xml里。
(2)设置好以上信息后,若使用下面的其中一个
response.setLocale(Locale.TAIWAN);
response.setLocale(new Locale("zh", "TW"));
response.setLocale(Locale.CHINA);
就会将HTTP响应的Content-Language设置为zh_CN,而字符编码处理设置为UTF-8。
此时,若使用HttpServletResponse的getCharacterEncoding()方法取得编码设置就是UTF-8。
example
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Archetype Created Web Application</display-name> <!-- 用于映射本地文件在网页上显示为utf-8编码 --> <locale-encoding-mapping-list> <locale-encoding-mapping> <locale>zh_CN</locale> <encoding>UTF-8</encoding> </locale-encoding-mapping> <locale-encoding-mapping> <locale>zh_TW</locale> <encoding>UTF-8</encoding> </locale-encoding-mapping> </locale-encoding-mapping-list> </web-app>