web开发编码问题

编码简介

ISO-8859-1 :属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列,无法表示中文。
UTF-8:utf编码兼容iso8859-1编码,英文用一个字节表示,中文用三个字节表示,可以用来表示所有语言的字符。
GBK:gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是双字节编码,GB2312的扩充,在码位上和GB2312兼容。
gb2312 :GB2312编码简称国标码,1980年发布,只能显示简体编码。
Unicode:可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。所以在很多软件内部是使用unicode编码来处理的,例如java。

jsp servlet编码问题

设置编码方式:

1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。

注意:如果JSP文件是以GBK为编码保存的,而在JSP中却指定pageEncoding="UTF-8",会引起JSP内部定义的字符串为乱码。
2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。
4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。

发送数据:

对于发送数据,服务器按照response.setCharacterEncoding—contentType—pageEncoding的优先顺序,对要发送的数据进行编码,浏览器也是根据这个参数来对其接收到的数据进行重新编码(或者称为解码)。

接收数据:

一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据。
无论使用那种方式提交,如果参数中包含中文,浏览器都会使用当前浏览器编码对其进行URL编码。

对于表单中POST方式提交的数据:

在接收数据的JSP中正确request.setCharacterEncoding参数,指定编码。如果不指定,则默认使用ISO-8859-1编码,需要进一步处理。
值得注意的是在执行setCharacterEncoding()之前,不能执行任何getParameter()。而且,该指定只对POST方法有效,对GET方法无效。

对于URL提交的数据和表单中GET方式提交的数据:

在接收数据的JSP中设置request.setCharacterEncoding参数是不行的,因为默认情况下使用ISO-8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码),而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码(解码)。
解决方法有两种。一种是在配置中间件相应的参数。另一种是对其中出现的字符,预先编码,在javascript中对encodeURI(string),其采用的是浏览器编码,jsp可以自动识别。

Ajax发送请求时浏览器自动编码

Get请求

对于Get方式发送的请求, 不同的浏览器使用不同的编码方式自动为中文参数编码.
比如:Firefox/3.0.5 使用UTF-8, IE6使用GB2312.

Post请求

对于Post方式发送的请求, 表单中的参数值对是通过request body发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。在HTML代码的Head中添加:<meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
Firefox/3.0.5 会使用根据charset中设置的编码格式编码post的中文参数.IE6不起作用.

实验表明使用客户端浏览器默认编码格式具有不确定性.所以传递中文时我们要手工编码参数.

总结

1 对于同一个应用,最好统一编码,推荐为 UTF-8 ,当然 GBK 也可以。
2 正确设置 JSP pageEncoding 参数
3 在所有的 JSP/Servlet 中设置 contentType="text/html;charset=UTF-8" response.setCharacterEncoding("UTF-8") ,从而间接实现对浏览器编码的设置。

4对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")


参考文章:

解析WEB开发编码问题

Ajax异步请求编码区别


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值