java_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="" %>
<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 上传组建 在全部为gb的环境下使用没有问题 只是在utf-8时会乱码

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


⑤ ajax 乱码

加上设置字符编码的方法:
response.setHeader("charset","gb2312");

看到的说明原文如下:

用AJAX中采用get来读取页面时,responseText里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,resposeBody默认采用utf-8编码,如果服务器送出的确实是utf-8的数据流的时候汉字会正确显示,而读取的页面编码是GBK或者GB2312时就会出现页面中文的乱码。
解决的办法有二:

1、在送出的流里面加一个header,指明送出的是具体编码流:

PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

2、采用utf-8编码来保存HTML文档

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值