让人抓狂的编码问题

经过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字符集对字节流解码的,很大可能没有办法正确还原了。
 

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

经过get方式向后台请求 浏览器

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

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
相关文章
相关标签/搜索