让人抓狂的编码问题

通过get方式提交的数据,需要在tomcat的 server.xml文件里设置URLEncoding =”utf-8”配置。
通过post方式提交的数据,需要在 request.getParameter()之前,调用 request.setCharacterEncoding(“utf-8”)

Response内容的编码,则可以
通过 response.setCharacterEncoding(“utf-8”).
或者设置contextType时同时设置编码
Response.setContentType(“ text.html, utf-8”)


编码和解码
把字符转换成0 1这样的二进制码 即编码。相反即解码。
一般不用二进制表示字符的编码(写起来,阅读都不方便),一般用十六进制表示。
因此字符《----》十六进制之间的映射的集合,即为字符集。

常用字符集 unicode(utf-16),gb2312,gb18030,gbk,utf-8,iso-8859-1 ,Big-5.

Unicode和utf-8能支持世界上所有语言的字符
Gb2312是旧的国家标准,不支持繁体中文
Gb18030是新的国家标准,支持繁体中文
Gbk不是国家标准,但支持繁体中文
Big-5支持繁体

Iso-8859-1不支持中文,英美等拉丁国家常用这个编码

注:如果你拿到一个字节流,需要清楚的知道,这个字节流是用什么字符集进行的编码,
常用开源工具:chardet,可以猜测一段字节流是什么编码。

如果你拿到一个字符串,发现输出的是乱码,那能否通过某种技术手段解决这个乱码问题,答案是不一定。
1)如果是按照iso-8859-1字符集对字节流解码得到的字符串,则可以得到正确的字符串,方法:getBytes(“iso-8859-1”)得到字节流,然后把字节流new String(byte[],”正确的字符集”)转换成正确的字符串。
2)不过不是按照iso-8859-1字符集对字节流解码的,很大可能没有办法正确还原了。
 

关于请求和响应的编码问题

通过get方式向后台请求

如果在某页面点击链接(链接附带中文),浏览器会自动根据这个页面使用的字符集对汉子编码,传到服务器

Get请求不能用request.setCharacterEncoding(),get请求的编码是有应用服务器决定的,对于get请求 tomcat设置。

Post请求用request.setCharacterEncoding(“”)指定客户端传到服务器的编码,可以在filter里设置,而不用在每个servlet里设置



小贴士:不同编码下的字符串占的字节数:
英文字母:A

字节数:1;编码:GB2312
字节数:1;编码:GBK
字节数:1;编码:GB18030
字节数:1;编码:ISO-8859-1
字节数:1;编码:UTF-8
字节数:4;编码:UTF-16

中文汉字:人
字节数:2;编码:GB2312
字节数:2;编码:GBK
字节数:2;编码:GB18030
字节数:1;编码:ISO-8859-1
字节数:3;编码:UTF-8
字节数:4;编码:UTF-16

转载于:https://my.oschina.net/u/243504/blog/177723

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值