javaweb中中文乱码解决方法总结之response和request解决方法

8 篇文章 0 订阅
4 篇文章 0 订阅

一中文论码问题出现的由来

        之所以会产生乱码问题,不仅仅是中文乱码,其原因就在于:编码和解码采用了不同的码表。而之所以会有编码和解码这一回事,也是因为,无论数据是在传输还是存储等等过程中,都是以字节的方式在运行,所以就有了编码问题,又因为技术发展,各国国情等等各方面的因素导致了这个世界上产生了很多种编码方式。

二常见的编码方式

        I.ISO-8859-1拉丁编码,,通常叫做Latin-1,Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符。

        2.GBK,GB2312标准中文字符集,目前中国境内的浏览器的默认编码就是GBK;

        3.UTF-8是 UNICODE 的一种变长字符编码,即 RFC 3629。简单的说——大字符集。可以解决多种语言文本显示问题,从而实现应用国际化和本地化。

三response乱码问题

        response响应对象,可以向客户端输出响应正文.response中提供了两个两个响应流,分别是字符响应流和字节响应流。其中字符响应流只能用来输出字符,而字节响应流可以用来输出任何东西

        1.字符流问题

        对于字符响应流而言,其字符响应流的默认编码方式是ISO-8859-1,所以当我们在使用字符流来输出中文的时候,如果不更改编码方式,那肯定乱码,   解决方案有:

       (1)设置response的字符流的编码方式为UTF-8;

           其代码为:response.setCharacterEncoding("UTF-8");

       (2)设置浏览器解码是用UTF-8的码表来解码;

           其代码为:response.setHeader("content-type", "text/html;charset=UTF-8");

        但是在设置了response.setHeader("content-type", "text/html;charset=UTF-8");其实不用书写response.setCharacterEncoding("UTF-8");因为前面的那句代码不仅设置了浏览器的解码方式,与此同时,也设置了服务器的编码方式。还有一种简便的书写方式为:response.setContentType("text/html;charset=UTF-8");这句代码也是在设置了浏览器的解码方式的同时也设置了服务器段的编码方式,所以一般采用这种代码书写方式。

        2字节流问题

        对于字节响应流而言,其默认的编码方式也是ISO-8859-1,所以也会出现中文乱码问题。 解决方案如下:

       (1)对字符进行编码的时候,指定编码方式。

           其代码为:response.getOutputStream().write("北京".getBytes("UTF-8"));

       (2)同时设置浏览器的解码方式。

           其代码为:response.setHeader("content-type", "text/html;charset=UTF-8");

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

四.request乱码问题

        我们先来理下思路,我们向服务器端发送数据,但我们是怎么发的呢?总的来说,我们有这么两种方式,一是自己在地址栏中写上请求地址加请求参数;二是通过点击表单或者是超链接来向服务器发送数据。那么对于刚刚提到的第一种方式,我们这里不作处理,因为我想,一般没人这么干吧,如果他要真这么干了,让他自己去处理吧。所以接下来,我们将会处理第二种方式的中文乱码问题,这又可以分为get请求和post请求两种。

        1.post请求乱码问题

                对于post请求,根据我们刚刚提到的,我们向服务器发送数据,是通过点击表单或者是超链接,那么说  明此时我们是在已经拿到服务器发送给客服端的页面了,而这种情况下,页面的编码方式一般情况下已经被设置了UTF-8,所以我们只需要设置服务器端的解码方式也为UTF-8即可。

         其代码为:request.setCharacterEncoding("UTF-8");

        2.get请求乱码问题

             对于get请求方式,理论上,我们也只需要告诉服务器以UTF-8的方式解码即可,但不幸的是,它不允许我们以编写代码的方式来更改服务器的解码方式,只能通过修改服务器的配置文件,具体操作就是,在服务器的conf目录下的server.xml文件中找到代码,然后在里面再添加一个属性URIEncoding,值为UTF-8.

[html]  view plain  copy
  1. <Connector port="8080" protocol="HTTP/1.1"   
  2.                connectionTimeout="20000"   
  3.                redirectPort="8443" />  

        既然不能通过编写代码的方式来更改解码方式,那怎么解决这个问题呢?其解决办法就是反编码,即,我们先对通过request.getParameter("参数");等函数得到的数据进行ISO-8859-1方式解码,然后把得到的字节再通过UTF-8解码,就得到了。

其代码为:String str = new String(request.getParameter("参数").getBytes("ISO-8859-1"), "UTF-8");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值