Servlet中文参数乱码问题

来源:互联网 发布:编程需要英语吗 编辑:程序博客网 时间:2024/06/05 15:13

Servlet中文参数乱码问题


1.get/post两种请求方式

   1)get请求
      a.哪一些情况下,浏览器会发送get请求
         a1.直接输入某个地址
         a2.点击链接
         a3.表单默认提交的方式
      b.特点
         b1. 会将请求参数添加到请求资源路径的后面,只能提交少量的数据。
         b2.会将请求参数显示在浏览器地址栏,不安全。
          注:比如路由器就会记录包含了请求参数的请求地址。
    2)post请求
       a.哪一些情况下,浏览器会发送post请求
           设置表单method="post"
       b.特点
          b1.会将请求参数添加到实体内容里面,可以提交大量的数据。
          b2.不会将请求参数显示在浏览器地址栏,相对安全
           注:不会将请求参数加密。

2.servlet输出中文

   (1)为什么会有乱码

        out.println方法在默认情况下,会使用"iso-8859-1"来编码。

   (2)如何解决

        response.setContentType("text/html;charset=utf-8");

注意:
          a,charset=utf-8:用来指定编码格式,只要支持中文即可,比如:gbk

  b,作用有两个

     第一:生产一个content-type消息头,告诉浏览器返回的数据类型和编码格式.

     第二:服务器在输出时,会使用指定的编码格式进行编码.

3.表单包含有中文参数值

   (1)为什么会有乱码

        因为当提交表单时,浏览器会对表单中的数据进行编码(会使用打开表单时的编码格式进行编码),而服务器默认情况下,会使用iso-8859-1去解码,所以,会产生乱码问题。

        编码方式不一致时,就会出现乱码。

   (2)如何解决

        解决方式1:

            step1,先保证表单所在页面按照指定的编码格式打开。

                  使用<meta http-equiv="content-type" content="text/html;charset=utf-8">

            step2,调用request.setCharacterEncoding("utf-8");

                  意思是告诉服务器,使用指定的编码格式进行解码.

             注:该方法只适用于post请求.

         解决方式2:

             step1,同上

             step2,使用new String(str.getBytes("iso-8859-1"),"utf-8");

              注:先还原得到浏览器发送过来的字节数组,然后使用正确的字符集来解码。

4.编解码问题

  (1)java语言在内存当中,会使用"unicode"编码格式(字符集)来保存字符。

  (2)编码:把unicode这种编码格式对应的字节数组转换成某种本地编码的格式(比如    gbk)对应的字节数组。
            unicode ---> gbk

  (3)解码:把某种本地编码格式的字节数组转换成unicode这种编码格式对应的字节数组。

  (4)如果servlet要输出中文,需要调用response.setContentType(“text/html;charset=utf-8”);

  (5)如果表单有中文参数值,也需要注意编码问题



     
         

0 0