一、问题
将外部代码拷贝到jsp文件中,保存时报以下警告:
list.jsp中包含的字符在转换为ISO-8859-1字符集时可能会遭到破坏。是否要使用此字符集来保存文件?
解决方法:
在jsp文件的开始加上下面代码:
<%@ page contentType="text/html; charset=UTF-8" %>再保存时就不会有警告了。
二、页面字符集转换
jsp中通常需要在第一行放置如下代码:
<%@ page contentType="text/html; charset=GB2312" %>
<%@ page contentType="text/html; charset=GB2312" %>
该行代码的作用是告诉jsp引擎(如tomcat、resin等),本页面使用的字符集是GB2312。如果jsp页面中包含有汉字,一定要包含本行代码。否则jsp引擎使用默认的字符集(通常为utf-8),这可能会导致jsp输出页面乱码。
同时jsp输出页面的字符集为GB2312,如果要按其他字符集输出,只需使用:
response.setContentType("页面类型");
例如:wap中通常要求页面按utf-8输出,只需把response的ContentType设置为utf-8即可,设置语句为:
response.setContentType("text/html; charset=utf-8");
jsp引擎会自动把输出的页面转换成指定的字符集。
三、
参数值字符集转换
response.setContentType("页面类型");
例如:wap中通常要求页面按utf-8输出,只需把response的ContentType设置为utf-8即可,设置语句为:
response.setContentType("text/html; charset=utf-8");
jsp引擎会自动把输出的页面转换成指定的字符集。
在jsp中,可以使用request.getParameter("参数名")获得参数值,参数值的默认字符集是ISO8859_1,如果不进行字符集转换,将导致汉字乱码。
可以采用《jsp样本代码》中的做法:
String szUserName = request.getParameter("username");
szUserName = new String(szUserName.getBytes("ISO8859_1"), "GB2312");
String szUserName = request.getParameter("username");
szUserName = new String(szUserName.getBytes("ISO8859_1"), "GB2312");
这种做法的缺点可能会包含汉字的参数值都需要转换,容易遗漏,代码量也相应增加了。
另外一个简便的方式是:在获取参数前,调用:
request.setCharacterEncoding("GB2312");
该语句的作用是告诉jsp引擎,页面参数采用的是中文编码,由jsp引擎自动完成字符集转换。然后,程序中直接调用request.getParameter("参数名")即可获得参数值,不需要再次进行字符集转换
request.setCharacterEncoding("GB2312");
该语句的作用是告诉jsp引擎,页面参数采用的是中文编码,由jsp引擎自动完成字符集转换。然后,程序中直接调用request.getParameter("参数名")即可获得参数值,不需要再次进行字符集转换