测验jsp的几个字符相关设置
sshong 发表于2008年4月7日 13:52:00 更新于2008年4月7日 22:52:00
考察一个最简单的测试jsp文件:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*,test.DbBean"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>test JSP encoding and charset</title></head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<body>
<%
response.setCharacterEncoding ("UTF-8");
out.println("中文");
%>
</body>
</html>
1.将该文件以utf-8方式保存。
浏览器访问该jsp文件,能正确显示“中文”2字,浏览器设置编码任意非UTF-8,输出乱码。

2.将该文件以ANSI方式保存。
  a.浏览器访问该jsp文件,不管怎样设置浏览器编码,均显示乱码。
  b.如果将pageencoding改为GBK,其他不变,则浏览器能正确显示“中文”2字,浏览器设置编码任意非UTF-8,输出乱码。
  c.如果不改变pageencoding,其他任意改变为gbk,均显示乱码。
  d.如果将pageencoding字段删除,更改jsp的contentType的charset为GBK,浏览器能正确显示中文,浏览器设置编码任意非UTF-8,乱码。

3.恢复到最原始文件并以UTF-8保存
  a.将response.setCharacterEncoding 改为“GBK”,浏览器能正确显示“中文”2字,浏览器设置编码为任意非简体中文,输出乱码。
  b.删除response.setCharacterEncoding 字段,将jsp的contentType的charset为GBK,浏览器能正确显示“中文”2字,浏览器设置编码为任意非简体中文,输出乱码
  c.删除response.setCharacterEncoding 以及jsp的contentType,只留下meta的charset,并且为GBK。浏览器能正确显示“中文”2字,浏览器设置编码为任意非简体中文,输出乱码。
  d.任意添加一个form,form里有一个文本框club,将方式设置为get,文本框中输入“中文”二字,单击提交,发现如果网页编码(即上述abc)为“UTF-8”,输出为club=%E4%B8%AD%E6%96%87,如果网页编码“GBK”,输出为club=%D6%D0%CE%C4。

综上,可以看出:
  1.pageencoding必须设置成当前jsp文件保存时选择的编码,便于转换为.java,如果这个pageencoding与jsp文件保存时须择的编码不一致,最终无论怎样,肯定出现乱码。
  2.没有pageencoding,jsp的contentType的charset可以代替其功能。
  3.response的setCharacterEncoding用于告诉服务器以该编码方式提取出class的字节流,并告诉浏览器这些字节流是用该编码的以便正确显示。如果人工修改浏览器编码方式为非改编码,将出现乱码。
  4.如果没有setCharacterEncoding字段,jsp的contentType的charset可以代替其功能。
  5.如果没有setCharacterEncoding 以及jsp的contentType的charset,html的meta标签中的content的charset可以代替其功能。
  6.网页页面中的form将默认采用网页本身(即上述3.4.5)的编码进行参数编码并传递。

结论如下图:
标签:无分类:未分组阅读:2772
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅