JSP/Servlet编码导致乱码问题


JSP/Servlet编码导致乱码问题


jsp页面的三处编码:

 

    1.<%@ page language="java" pageEncoding="UTF-8"%>


        作用:告诉jsp编译器将jsp编译成Servlet时使用的字符编码

        例如,你的JSP文件是以GBK为编码保存的 (右击jsp-->Properties --> Text file encoding

               设置成与pageEncoding不一致时,就有乱码),而在JSP中却指定pageEncoding="UTF-8",

                就会引起JSP内部定义的字符串为乱码。

    2.<%@page contentType="text/html; charset=UTF-8" %>


        作用:告诉浏览器对发送给服务器的数据编码和对响应数据解码所使用的字符编码

    

        

    3.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


        作用:控制浏览器以何种字符编码显示网页内容




Servlet中的两处编码


     1.request.setCharacterEncoding("UTF-8")


        作用:设置对客户端请求的参数进行解码所使用的字符编码

  * 只对两种请求参数提交方式有效:

                * POST表单提交

                * GET提交(url或GET表单提交), 此时要求配置

                server.xml的<Connector>标签的属性:useBodyEncodingForURI="true"


     2.response.setCharacterEncoding("UTF-8");


        作用:设置服务器对响应数据进行编码所使用的字符编码



   

浏览器编解码说明


           浏览器在接收或发送数据时,会对URL和参数会进行URL解码(接收)或编码(发送),所使用的编码为:           

            <%@pagecontentType="text/html;charset=GBK" %>

                               或response.setCharacterEncoding("UTF-8")指定的编码


服务器编解码说明

服务器发送数据时,按照response.setCharacterEncoding—contentType—pageEncoding

          的优先顺序,对要发送的数据进行编码。

          服务器接收数据,要分三种情况。

                一种是浏览器直接用URL提交的数据,另外两种是用表单的GET和POST方式提交的数据


(1)表单中POST方式提交的情况:


              可以通过request.setCharacterEncoding(charset),来设置对浏览器提交的数据使用什么样的

          编码进行解码。如果不设置时,服务器默认使用ISO-8859-1来解码请求参数。如果页面的

          contentType="GBK", 此时要想得到正确的结果,则:

          Stringname = newString(request.getParameter("name").getBytes("ISO-8859-1"),"GBK");

           如果设置:request.setCharacterEncoding("GBK"),则只需:String name = request 

         .getParameter("name");所以对于POST表单提交的数据,在获得数据的JSP页面中       

          request.setCharacterEncoding要和生成提交该表单的JSP页面的

           response.setCharacterEncoding设置成相同的值。

          还有一种方法解决POST提交乱码问题:使用过滤器,在过滤器中设置

           request.setCharacterEncoding(charset)


(2)URL提交的数据和表单中GET方式提交的情况:


                   此时设置request.setCharacterEncoding参数是不行的,因为在Tomcat5.0中,

            默认情况下使用ISO-8859-1对URL提交的数据和表单中GET方式提交的数据进行解码,

           而不使用该参数对URL提交的数据和表单中GET方式提交的数据解码。要解决该问题,

          应该在Tomcat的配置文件server.xml的Connector标签中设置useBodyEncodingForURI

         或者URIEncoding属性,

         *useBodyEncodingForURI参数为true时表示用request.setCharacterEncoding参数对URL

          提交的数据和表单中GET方式提交的数据进行重新解码。

         *URIEncoding参数指定对所有GET方式请求(包括URL提交的数据和表单中GET方式提交的数据)

          进行统一解码的编码

    

       即处理get方式请求参数有四种情况:

                * 不设置server.xml的Connector标签,此时服务器统一对get方式的请求参数进行ISO-8859-1

                   解码,此时设置request.setCharacterEncoding(charset)是无效的

               * 设置server.xml的Connector标签,令useBodyEncodingForURI="true",此时使用情况和

                  post提交方式一致

               * 设置server.xml的Connector标签,令URIEncoding="charset",此时服务器统一对get方式的

                  请求参数进行charset解码

              * 设置server.xml的Connector标签,令useBodyEncodingForURI="true"URIEncoding="charset", 

                 此时URIEncoding设置无效

 

<Connectorport="8080" maxThreads="150" minSpareThreads="25"maxSpareThreads="75" 

                    enableLookups="false"

redirectPort="8443"

                    acceptCount="100" 

                   debug="0"

                   connectionTimeout="20000" 

                  disableUploadTimeout="true"

useBodyEncodingForURI="true"URIEncoding="UTF-8"/>

时间: 2024-12-27 17:48:18

JSP/Servlet编码导致乱码问题的相关文章

jsp/servlet编码原理

转自:http://janwer.iteye.com/blog/150226 首先,说说 JSP/Servlet 中的几个编码的作用 在 JSP/Servlet 中主要有以下几种设置编码的方式: pageEncoding ="UTF-8"(JSP) contentType = "text/html;charset=UTF-8"(JSP) request.setCharacterEncoding("UTF-8")(JSP,Servlet) resp

JSP和Servlet的中文乱码处理

JSP和Servlet的中文乱码处理 前几天学习了JSP和Servlet中有关中文乱码的一些问题,写成了博客,今天进行更新一下.应该是可以解决日常的乱码问题了.现在作以下总结希望对需要的人有所帮助.我也是刚学,所以有不足之处希望谅解. 一.表单提交时出现乱码: 在进行表单提交的时候,经常提交一些中文,自然就避免不了出现中文乱码的情况,对于表单来说有两种提交方式:get和post提交方式.所以请求的时候便有get请求和post请求.以前我一直以为get请求和post请求方式出现的乱码的解决方式是一

JSP/ Servlet常见的中文乱码原因

在开发中,我们经常遇到中文乱码的问题,比方: &浏览器中看到的 Jsp/Servlet 页面中的汉字成了 '?' ?  &浏览器中看到的 Servlet 页面中的汉字都成了乱码  &Jsp/Servlet 页面无法显示 GBK 汉字. &Jsp/Servlet 不能接收 form 提交的汉字. &JSP/Servlet 数据库读写无法获得正确的内容. 隐藏在这些问题后面的是各种错误的字符转换和处理.解决类似的字符encoding问题,须要了解 Jsp/Servlet

转-Eclipse,tomcat及jsp页面编码的设定解决的中文乱码问题

一.Eclipse下编码的设定(在myeclipse下设定方法类似) 1.window -> Preferences -> general -> Workspace -> Text file encoding(这里是设置工作去的编码) 选择Other,将编码改变为UTF-8,这样以后新建立工程其属性对话框中的Text file encoding即为UTF-8. 2.window -> Preferences -> general -> Content Types(

我遇到的jsp 传递参数 出现乱码的情况(项目统一编码utf-8)

今天真是花了不少时间在这个乱码的问题上啊!为防止下次自己或别人再遇到相似的问题浪费过多的精力在这里... 特写下一些统一编码的相关步骤,不常写文章,本文可能写得不怎么好,仅供参考,谢谢 统一各文件的编码格式为UTF-8: 我的jsp文件头部:<%@ page language="java" pageEncoding="UTF-8"%> (xml文件的头部默认都是:  <?xml version="1.0" encoding=&q

&lt;&lt;&lt; html编码中js和html编码不一致导致乱码

在html中,有时把编码设置成UTF-8之后,引入js,页面不会有乱码,但是有关js的东西会出现乱码, 大概问题就是js默认编码不是UTF-8, 解决办法:将js文件用记事本打开,在另存为,保存的时候下面选项编码设置成html一致,就不会出现乱码 <<< html编码中js和html编码不一致导致乱码,布布扣,bubuko.com

MySQL对JSON类型UTF-8编码导致中文乱码探讨

前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中文出现乱码还有可深挖之处,接下来我们来分析一下,若有错误之处,还请批评指出. 字符编码 评论中指出任何不在基本多文本平面的Unicode字符,都无法使用MySQL的utf8字符集存储,包括Emoji 表情(Emoji 是一种特殊的Unicode 编码,常见于IOS和Android 手机上)和很多不常

Java编码与乱码问题

一.为什么要编码? 由于人类的语言太多,因而表示这些语言的符号太多,无法用计算机的一个基本的存储单元----byte来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解. byte一个字节即8个bit,所以能表示的字符范围是0~255个,这满足不了人类的需要,要解决这个矛盾必须需要一个新的数据结构char,从char到byte必须经过编码. 二.常用编码介绍 ASCII码 总共128个,用一个字节的低7位表示,0~31是控制字符,如换行.回车.删除等,32~126是打印字符,可以通过键盘

Java Web 编码问题一:jsp的编码问题

首先我们来看一张由eclipse生成的jsp文件的头: 图1:JSP文件编码 如上图所示jsp中的三个编码, ①代表的是服务器响应客户端请求的编码方式.服务器会用它来设置http响应头的content-type.就好比在Servlet中用response.setContentType("text/html;charset=utf-8")的作用.可以在浏览器的Header中响应头中的Content-Type中看到. ②pageEnconding的编码是值jsp文件本身被编码的编码格式.因