JSP应用解决中文乱码问题(初步解决)

1.熟悉编码格式
(1)ISO8859-1
ISO8859-1属于单字节编码,应用于英文系列。无法表示中文字符。JSP等页面默认生成的都是ISO8859-1编码格式。
(2)GB2312/GBK
GB2312/GBK是汉字的国际码,专门表示汉字,是双字节编码,而英文字母兼容ISO8859-1编码。
GBK是GB2312的超集,同时表示繁体字和简体字。GB2312只能表示简体字。
(3)Unicode
Unicode属于最统一的编码,可以用来表示所有的字符,固定式定长双字节。不兼容其他编码。
(4)UTF-8
Unicode编码占用2个字节,对于英文也是占用2个字节,不便于传输和存储,所以产生了UTF-8编码。
UTF-8编码兼容ISO8859-1编码,是不定长的编码,每个字符长度是1~6不等。通常,英文占用1个字节,汉字占用3个字节。
设计网站中,如果访问的多是中国网站,用户确定,最好使用GB2312/GBk编码最节省,如果国际通用含不少英文,最好使用UTF-8编码。

注:对中文的编码详解。GBK中-42 -48代表了”中“字,-50 -60代表了”文“字。UTF-8中,-28 -72 -83代表一个中文汉字。 ISO9959-1 编码属于单字节编码,在中文系统下,-42 -48每次只是编译一个字节,会出现?号。不同的编码可用 getBytes()/getBytes(encoding) 函数解决,他们依赖于平台,不要轻易使用和滥用。

2.Web应用中的编码部分
(1)JSP编译
JSP编译通常指定文件的存储编码,置于文件开头。例如:
<%@ page pageEncoding="GBK"%>
另外,对于一般的class文件,可以在编译的时候指定编码。
(2)JSP输出
指定文件输出到Browser中的编码,置于文件开头。例如:
<%@ contentType="text/html;charset=GBK"%>
等同于设置response.setCharacterEncoding("GBK")
(3)META设置
指定网页的编码,对静态网站有作用。例如:
<META http-equiv="Content-Type" content="text/html; charset=GBK"/>
若JSP输出和META设置同时采用,以JSP输出优先。
(4)form设置
表单提交时可以指定相应的编码,例如:
<form accept-charset="gb2312"> 通常无需设置


3.乱码产生原因
(1)JSP页面被编译成class时,如果未指定字符集,默认使用ISO8859-1编码,对于中文会出现乱码。
(2)使用表单以POST方式提交时,默认使用ISO8859-1方式进行提交,对于的接受JSP页面使用UTF-8方式,出现乱码。
(3)表单如果使用GET方式提交,Tomcat默认以ISO8859-1进行提交,追加到URL中,导致乱码。
(4)数据库中存储和读取设置方式不一致导致读取的数据库内容出现?问题,添加数据没有问题,读取是数据不一致导致。


4.解决方式
(1)设置文件本身的编码方式。
在Eclipse或者MyEclipse中,执行Window-Preferences-General-Content Types-JSP中,Default encoding:UTF-8修改。
(2)JSP页面指定字符集。例如:
<%@ contentType="text/html;charset=GBK"%>
<html>
<head>
<title>字符集</title>
<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>
</head>
</html>
(3)数据连接是指定字符集
JDBC进行连接时指定字符集编码格式,例如:
String url="jdbc:mysql://localhost/db_stu?useUnicode=true&characterEncoding=utf8";
(4)获取页面时进行设置
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
(5)中文作为参数传递时,同样进行设置。
...index.jsp?keywords="+java.net.URLEncoder.encode(keywords)
接受页面使用如下语句:
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
(6)使用过滤器解决
设置过滤器,对所有经过的request和response进行设置,设置方法同上。

参考:《JSP基础与案例开发详解》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值