解决jsp乱码问题

 
一、 首选先认识一下编码的格式
     GB2312简体中文  
     utf-8国际编码    
     iso-8859-1美国用的编码(tomcat中传输用的编码)
     GBK是 GB2312的扩展都是简体中文

二、 接着我们举例子1 来说明乱码的问题
    1  页面  formpost.jsp 是提交数据的页面
    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ page contentType="text/html;charset=iso8859-1"%>
    <html>
    <head>
    <title>中文问题</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
     <body>
      <form action="formsave.jsp" method="post" name="form">
     <input type="text" name="test" value="测试" />
    </form>
    </body>
    </html>
   第一个地方的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面  的汉字。dreamweaver 是在在首选参数中设置

   第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样如有中文肯定出乱码。也就是必须一 致。而第二处所在的这一行,可以没有。
   缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,“测试”也会出现乱码。必须一致才可以。

   第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。
   因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。

  2 页面 formsave.jsp
 <%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>测试数据</title>
 </head>
 <body>
 <%
 String test=request.getParameter("test");
 out.print(test);
 %>
 </body>
 </html>
结果发现是乱码这是因为 tomcat 取得数据以后转为iso8859-1发送给formsave.jsp引起的
过程formpost.jsp (utf-8)--------->>> tomcat(数据iso8859-1)-------------->>>>formsave.jsp(utf-8)
所以要在formpost.jsp  加入 test=new String(test.getBytes("ISO8859_1"),"utf-8");
这样做要在每个页面加入这个代码很麻烦 所以最好在每个页面加载前使用过滤器
(过滤器 在web.xml中注册)
但是如果提交的页面是采用get或者js写路径的方式提交过滤器不起作用
这是解决方法
 Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的Connector节点增加useBodyEncodingForURI="true"

属性配置,即可控制tomcat对get方式的汉字编码方式,上面这个属性控制get提交也是用request.setCharacterEncoding ("UTF-8")所设置的编码格式进行编码。
所以自动编码为utf-8,接受页面正常接受就可以了。但我认为真正的编码过程是,tomcat又要根据

<Connector port="8080"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"

disableUploadTimeout="true" URIEncoding=”UTF-8”/>
(tomcat6.0的时候似乎最后面的URIEncoding=”UTF-8”不能加,或者不用加,不加测试通过)

里面所设置的URIEncoding=”UTF-8”再进行一次编码,但是由于已经编码为utf-8,再编码也不会有变化了。如果是从url获取编码,接受页面则是根据URIEncoding=”UTF-8”来进行解码的

 三、上传乱码的问题
上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传组件,会发现有很多乱码想象  我使用的是 xiaoxiang 上传组件在全部为gb2312的环境下使用没有问题 只是在utf-8时会乱码

四、PreparedStatement添加数据的时候要将 new String(str.getBytes("gbk"),"ISO8859-1"); 转为iso8859-1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值