java编码全解析

http中传递的消息分为请求行  请求头  实体内容

请求行  就是网址

请求头中有很多字段  比如cookies就是其中的一个字段

实体内容  常见的post请求中的实体内容

  其中实体内容是可以通过HttpServletRequest request, HttpServletResponse response设置编码的

  解码定义  将字符转换为字节(二进制数)

 编码定义  将字节(二进制数)转换为字符

其中如果

   request.setCharacterEncoding("utf-8")  设置服务器接收客户端的字节,然后将字节转换为字符的编码格式

   response.setContentType("text/html;charset=utf-8");设置服务器发给客户端的字节和客户端解码的码表  

    服务器将字符转换为字节发送给客户端 然后客户端接收到字节,通过解码将字节转换字符

请求行中  

1.常见的 get请求的信息是在请求行中

服务器拿到从客户端发过来的数据

因为  request不能设置编码格式,所以会采用默认的编码"iso-8859-1"进行编码

所以需要将得到的字符通过"iso-8859-1"码表转换为字节,然后再通过对应的码表将此字节转换为字符

value是get请求中得到的字段的值

new String(value.getBytes("iso-8859-1"),"uft-8");

2.整个网址链接上存在特殊字符(中文等)==对网址链接处理办法

encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文或其他英文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,再用decodeURI把字符还原回来 Javascript:encodeURI(URIString)与decodeURI(URIString) 必选的 URIString 参数代表一个已编码的 URI。 说明 encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。 注:decodeURI()方法相当于java中的java.net.URLDecoder.decode(URIString, "UTF-8") encodeURI() 方法java.net.URLEncoder。encode(URIString, "UTF-8"))

 

 请求头中     常见的  cookies对象

服务器先用iso-8859-1码表编码cookies字段发送给客户端,然后客户端通过iso-8859-1去编码此字段

 如果cookies对象中的参数存在iso-8859-1"码表没有字符,那么直接会报错(iso-8859-1不支持中文等特殊字符)

所以通过将此参数进行转换

String curDate = URLEncoder.encode(date, "utf-8");===解码的时候设置码表

String getDate =URLDecoder.decode(c.getValue(),"utf-8");===编码的时候设置码表

猜你喜欢

转载自blog.csdn.net/qq_30871035/article/details/83651264