现在的位置: 首页 > 综合 > 正文

Java 的 URL 编码

2013年05月09日 ⁄ 综合 ⁄ 共 1039字 ⁄ 字号 评论关闭

JAVA网络中的编码格式。
浏览器和服务器中的传输方式基本上有两种:
1.放在http request的head:head中包括了URL信息,下面的图显示了URL的结构(网图,转自IBMDEVELOPER)

然后再具体看浏览器中的网络监视发送的reqeust,city的发送内容是“杭州”如下图

我们可以清楚的看到url中是根据UTF-8编码的。
具体的整个流程如下:

服务器端收到了一串bytes流,包括url,但是却不知道该用什么编码格式来对这段bytes流进行解码。
因为URI部分(浏览器发送网页的编码格式)和QueryString部分(根据网页的编码格式)的编码格式有可能不同,所以服务器接收的时候就会用不同的编码格式进行解码
URL 的 URI 部分进行解码的字符集是在 connector 的 <Connector URIEncoding=”UTF-8”/> 中定义的,如果没有定义,那么将以默认编码 ISO-8859-1 解析。
QueryString 的编码采取不同的编码格式不同可以猜测到解码字符集肯定也不会是一致的。的确是这样 QueryString 的解码字符集要么是 Header 中 ContentType 中定义的 Charset 要么就是默认的 ISO-8859-1,要使用 ContentType 中定义的编码就要设置 connector 的 <Connector URIEncoding=”UTF-8” useBodyEncodingForURI=”true”/> 中的 useBodyEncodingForURI 设置为
true。
上面两项的设置需要在tomcat的server.xml配置文件中设置。
如果不进行额外的设置读取正确request中的参数值的时候需要如下代码:
Java代码

  1. String city = new String(request.getParameter("city").getBytes("ISO8859-1"),"UTF-8");  

            这样city的值为“杭州”,具体过程如下:

2. 放在http request的body
主要形式是form表单post提交的信息。
POST 表单参数传递方式与 QueryString 不同,它是通过 HTTP 的 BODY 传递到服务端的。当我们在页面上点击 submit 按钮时浏览器首先将根据 ContentType 的 Charset 编码格式对表单填的参数进行编码然后提交到服务器端,在服务器端同样也是用 ContentType 中字符集进行解码。不需要进行额外设置。

抱歉!评论已关闭.