字符在转换为ISO-8859-1字符集时可能会遭到破坏

时间:2022-06-04 08:43:48

一、问题

将外部代码拷贝到jsp文件中,保存时报以下警告:

list.jsp中包含的字符在转换为ISO-8859-1字符集时可能会遭到破坏。是否要使用此字符集来保存文件?

解决方法:

在jsp文件的开始加上下面代码:

<%@ page contentType="text/html; charset=UTF-8" %>
再保存时就不会有警告了。

二、页面字符集转换

  jsp中通常需要在第一行放置如下代码:
     <%@ 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引擎会自动把输出的页面转换成指定的字符集。
三、 参数值字符集转换
  在jsp中,可以使用request.getParameter("参数名")获得参数值,参数值的默认字符集是ISO8859_1,如果不进行字符集转换,将导致汉字乱码。
  可以采用《jsp样本代码》中的做法:
   String szUserName = request.getParameter("username");
   szUserName = new String(szUserName.getBytes("ISO8859_1"), "GB2312");
  这种做法的缺点可能会包含汉字的参数值都需要转换,容易遗漏,代码量也相应增加了。
   另外一个简便的方式是:在获取参数前,调用:
    request.setCharacterEncoding("GB2312");
   该语句的作用是告诉jsp引擎,页面参数采用的是中文编码,由jsp引擎自动完成字符集转换。然后,程序中直接调用request.getParameter("参数名")即可获得参数值,不需要再次进行字符集转换