Java Web 中的编解码

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

url解码

<Connector port="8080" protocol="HTTP/1.1"  
              connectionTimeout="20000"  
              redirectPort="8443" useBodyEncodingForURI='true' URIEncoding='UTF-8' />

URIEncoding设置Path Info的解码方式编码

useBodyEncodingForURI设置queryString 经过header中的ContentType解码url

post表单编解码

编码:浏览器经过ContentType charset进行编码.net

解码:request.setCharacterEncoding(charset)code

Http body 编解码

编码:response.setCharacterEncoding(覆盖request.getCharacterEncoding)编码,并写入Header Content-Typexml

解码:

  1. Content-Type。
  2. <meta HTTP-equiv="Content-Type" content="text/html;charset=GBK"/>

  3. 浏览器默认

常见编码错误

一个字符变两个

输入图片说明

字符变?

输入图片说明

一个字符变两个?

输入图片说明

一种不正常的编码

症状:

String value = request.getParameter(name);	//乱码
String value = String(request.getParameter(name).getBytes("ISO-8859-1"),"GBK"); //正常

输入图片说明

缘由:没有配置useBodyEncodingForURI=true

默认使用iso-8859-1解码,解码后乱码

将乱码再编码,在用gbk解码获得正确结果。

相关文章
相关标签/搜索