acsii编码(1个字节8位) 够表示英文了,不能表示其余国家的字 GB2312 是对 ASCII 的中文扩展。127号以前和acsii同样 unicode表示全部字(2个字节),可是对于英文存储翻倍。 utf-8 可变长度的编码方案,经常使用的英文1个字节,汉字3个字节。省空间。html
首先%是由于url规范。非ASCii编码编码16进制后都要加%java
能够看出Path Info 和Query String 采用不一样的编码。浏览器
参见:不一样浏览器中URL的编码方式post
<%@ page contentType="text/html;charset=UTF-8" %> 用于编码query Stringui
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI='true' URIEncoding='UTF-8' />
URIEncoding设置Path Info的解码方式编码
useBodyEncodingForURI设置queryString 经过header中的ContentType解码url
编码:浏览器经过ContentType charset进行编码.net
解码:request.setCharacterEncoding(charset)code
编码:response.setCharacterEncoding(覆盖request.getCharacterEncoding)编码,并写入Header Content-Typexml
解码:
<meta HTTP-equiv="Content-Type" content="text/html;charset=GBK"/>
症状:
String value = request.getParameter(name); //乱码 String value = String(request.getParameter(name).getBytes("ISO-8859-1"),"GBK"); //正常
缘由:没有配置useBodyEncodingForURI=true
默认使用iso-8859-1解码,解码后乱码
将乱码再编码,在用gbk解码获得正确结果。