JSP中文乱码问题终极解决方案(下) 您所在的位置:网站首页 文件上传中文名乱码怎么解决呢视频 JSP中文乱码问题终极解决方案(下)

JSP中文乱码问题终极解决方案(下)

2023-11-21 01:36| 来源: 网络整理| 查看: 265

摘要:

  本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码、JSP源文件中文乱码、GET 请求的请求参数为中文乱码 和 POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案。

一. JSP页面与JSP源文件乱码

  在介绍JSP页面与JSP源文件的乱码问题前,首先我们必须对JSP页面中文乱码问题与JSP源文件中文乱码问题有一个清晰的概念,即:

JSP页面中文乱码问题是指用户在浏览器看到的服务器所返回的jsp页面中,中文字符不能正常显示;

JSP源文件中文乱码问题是指在编辑器保存JSP源文件后,中文字符不能正常显示。

因此,这是两个不同层面的问题。接下来,我们分别解决这两个问题。

1、JSP页面乱码

  我们先在记事本中编写一个JSP程序,如下:

JSP页面中文乱码 中国

  上面这个JSP程序是在页面显示几句中文而且标题也是中文,运行后在浏览器中显示如图所示:

              JSP页面中文乱码.png-15.4kB

  原因在于没有在JSP中指定 页面显示的编码,消除乱码的解决方案就是将上面代码中的page命令修改成如下所示即可:

JSP页面中文乱码 中国

  再次运行中文正常显示,原理就是 向页面指定编码为utf-8,那么页面就会按照此编码来显示,于是乱码消失。

2、JSP源文件乱码

1). JSP源文件乱码 与 Eclipse/MyEclipse 对JSP的默认编码设置

  如果我们在Eclipse/MyEclipse中打开上面示例1的jsp源文件,由于Eclipse/MyEclipse中默认的JSP编码格式为ISO-8859-1,所以当打开由其他编辑器编辑的JSP文件时会出现乱码,如图所示:

             

  对于这个问题,我们只需要更改一下 Eclipse/MyEclipse 中对JSP的默认编码并update就可以了,修改的地方(我的MyEclipse版本为 10)如图所示:

            myeclipse对JSP源文件的编码 .png-31.6kB

  修改后,对于在Eclipse/MyEclipse所创建的任何一个JSP源文件,其默认编码方式均为 UTF-8,例如:

            修改后的效果.png-23.8kB

  如果不做上述修改,如果我们在Eclipse/MyEclipse中编辑的JSP中存在中文字符,那么当我们保存该页面时,会弹出以下对话框:

             iso-8859-1.png-11kB

  但是,我们如果我们提前按如上步骤设置后,JSP源文件就能正常保存、编译。

2). Eclipse/MyEclipse 创建 JSP时 pageEncoding 的默认值设置

  我们在编辑的JSP文件时,尤其在包含中文字符时,一定要在page编译指令中恰当地指明 pageEncoding 的值,否则在浏览器访问该JSP页面时,其中的中文就会显示为乱码。因为一旦缺省 pageEncoding 时,其值就会被默认指定为 “iso-8859-1”,该字符集不支持中文。此外,使用 Eclipse/MyEclipse 进行开发的伙伴们都知道,这两个IDE生成的JSP模板的pageEncoding的默认值是“iso-8859-1”。为方便开发,我们可以更改Eclipse/MyEclipse生成JSP模板时pageEncoding的默认值,修改的地方(我的MyEclipse版本为10)如图所示:

            pageEncoding.png-17.2kB

  这样,通过以上两步的设置,当我们在 Eclipse/MyEclipse 中创建一个新的JSP文件时,该源文件在Eclipse/MyEclipse中的默认编码方式为utf-8,因此就不会导致 JSP源文件乱码;并且其 pageEncoding 的值会被自动设为“utf-8”,这就不会导致JSP页面乱码。

二. GET 请求的请求参数为中文情形

1、URL传递参数中文乱码

URL传递参数中文乱码

运行结果如下图所示:

              GET URL参数.png-32.9kB

2、表单提交中文乱码

  该示例由 “收集参数的表单页” 和 “表单提交参数显示页”两部分构成。

收集参数的表单页:

收集参数的表单页 用户名: 性别: 男: 女: 喜欢的颜色: 红: 绿: 蓝: 来自的国家: 中国 美国 俄罗斯

表单提交参数显示页:

表单提交中文乱码

运行结果如下图所示:

            GET表单实例结果.png-55.1kB

3、GET 请求的请求参数为中文情形小结

  只要我们以GET形式提交请求,无论是以表单形式提交还是以URL形式提交,如果参数中存在中文字符,那么我们必须进行相应的转码(借助String类)或者解码(借助URLDecoder类),关于 URLDecoder 的详细介绍见我的博文《使用 URLDecoder 和 URLEncoder 对中文进行编码和解码》。特别地,有五点需要注意:

request.getQueryString() 所返回的原生查询字符串只适用于 GET请求 ,若对 POST请求 使用,则返回 null;

利用 URLDecoder 进行解码时,必须先对原生查询字符串解码,而后获取各请求参数。如果先获取各个请求参数,再依次解码,则仍是乱码;

使用String进行 转码时,往往都是先从 ISO-8859-1 格式的字符串中取出字节内容,然后再用页面相应的编码格式重新构造一个新的字符串,像本示例(new String(country.getBytes(“ISO-8859-1”), “utf-8”))中的 一样。这样就可以支持中文字符的正常取值和显示;

利用 URLDecoder 进行解码时,所采用的解码字符集取决于浏览器(本文所有实验都是基于 Google Chrome 的)。对于中文环境而言,一般要么是 UTF-8,要么是 GBK ;

对于 GET请求,语句 request.setCharacterEncoding(“utf-8”); 对避免中文参数乱码起不到任何作用。

    经过上面的处理,GET请求的中文参数乱码问题已经得到解决。但是如果上面的表单中的输入项不止几项,那么每个输入项都需要进行编码转换,那样就很麻烦了。这时,我们就用到了大名鼎鼎的过滤器 filter 了。

三. POST 请求的请求参数为中文情形

  一般地,我们以POST形式提交请求,都是以表单形式进行并且 form 的 method 属性为 post。下面的示例对上面的示例做了一些修改,也由 “收集参数的表单页” 和 “表单提交参数显示页” 两部分构成:

收集参数的表单页:

收集参数的表单页 用户名: 性别: 男: 女: 喜欢的颜色: 红: 绿: 蓝: 来自的国家: 中国 美国 俄罗斯

表单提交参数显示页:

表单提交中文乱码

运行结果如下图所示:

            POST表单参数.png-32.1kB

  根据上面运行结果,我们知道: 对于POST请求,若其请求参数包含中文字符,那么我们只需在解析请求参数前加一句如下的代码即可。需要注意的是,这种方式对 Get请求起不到任何作用。此外,由于我们对请求已经重新编码,所以已经不需要使用 String类 再进行转码,否则画蛇添足。最后,对于 POST请求,request.getQueryString(); 返回的查询字符串为 null。

request.setCharacterEncoding("utf-8"); 四. 总结

  本文首先从四个方面给出了在使用JSP过程中可能出现中文乱码的情形,具体包括JSP页面中文乱码、JSP源文件中文乱码、GET 请求的请求参数为中文乱码 和POST 请求的请求参数为中文乱码四种情形,并针对每种情形给出了相应的终极解决方案。

  更多关于 JSP技术的细节见我的其他两篇博客: 《Java Web基础 — Jsp 综述(上)》 和 《Java Web基础 — Jsp 综述(下)》。

  更多关于 JSP中文乱码问题的解决方案见我的另一篇博客:《 JSP中文乱码问题终极解决方案(上)》。

引用

JSP中文乱码问题终极解决方案



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有