且是一对一 的关系。不必去深究这里是怎么转化的,在 Java 中提供了现成的方法完成这个转化过程, java.net.URLEncoder.encode 方法可以完成转化。(查看附录) 关键的问题是这样的:浏览器发送一个请求的时候,一次请求是一个数据包。这个数据 包中同时包含了访问的 URL 路径(中文经过转码) ,还有 URL 后面以“?”连接的参数(如果 参数有中文也会转码),还加上页面中的表单。比如如下的表单就会出现这个问题
当用户输入了中文数据点了提交。 这一次请求中三个存放数据的区域都出现了中文。 为 什么会频频造成乱码呢?下面将阐述: 第一部分,URL 路径部分的中文以何种编码标准进行转码,并不是程序中能够设置的。 而是浏览器默认的。 注意! 注意! 这是一个严重的问题, 也就是说浏览器无论访问哪个网址, 出现中文的时候都是以自己“愿意”的编码标准进行转码。可以通过设置来修改浏览器在转 化 URL 路径时使用的编码标准。如 IE 的设置方式是:打开 internet 选项。在高级里面,有 一个“国际”分类,里面有一个复选框“发送 UTF-8 URL” 。如果勾上,浏览器将“始终”以 UTF-8 进行转码。如果未勾上,则会同第二部分的编码方式一样。不同的浏览器处理的方式 还不一样,值得注意! 第二部分,URL 路径后面跟随的参数部分使用的编码方式又不一样了,这个编码方式是 根据当前的 HTML 页面决定的。 通常访问一个新的 URL 都是以表单发送或者超级链接, 这样 前一个
HTML 页面中指定的编码方式将决定这次请求时参数的编码方式。 如果是首次访问人 工输入的 URL,则浏览器以默认编码方式进行转码。 第三部分,表单部分浏览器以何种编码方式发送数据,下文将有介绍。
总结来说,URL 路径部分以何种格式进行编码是浏览器自己决定的,而参数部分
和表单 部分同时是根据当前页面的语言环境决定的。那么是页面的哪个设置决定了的呢?见如下 JSP 代码: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="gbk"%>
其中有三个设置编码的地方, 按顺