原文:在設置完這個后,居然有一個漢字可以顯示了出來,但其它的漢字顯示成為了一個方框(不解)!原因:还是乱码,只是刚巧那2个字符组成的编码是个汉字。原文:<a href="xxxx.jsp?productName=${param.productname}">bbbb </a>办法:
1.取得productName属性转码;
2.用ISO-8859-1转码。
1.取得productName属性转码;
2.用ISO-8859-1转码。
1、去掉<Connector>中 URIEncoding="UTF-8"的配置
2、确保<a href="xxxx.jsp?productName=${param.productname}">bbbb</a>所在页面的编码为UTF-8
3、在xxxx.jsp写如下代码获取请求值:
String productName = request.getParameter( "productName" );
productName = new String( productName.getBytes("ISO-8859-1"), "UTF-8" );
System.out.println( productName );
此时,如果控制台上输出的是乱码,说明我之前的步骤不可行。
如果控制台上输出正确的中文,而页面上看到的是乱码,则请将xxxx.jsp的页面编码改为UTF-8PS:
设置JSP页面编码的方法
1、
<%@ page contentType="text/html;charset=UTF-8" %>
2、
<%@ page pageEncoding="UTF-8" %>
encodeURI(${param.productname})
<form action="test.jsp">
username : <input type="text" name="username" />
<br />
<input type="submit">
</form>
也就是输入框传值.
test.jsp中主要代码为:
Hello <%=request.getParameter("username")%>
这样不可能出现乱码的因为这里面没出现中文。
如果改成这样:
<form action="test.jsp">
用户名 : <input type="text" name="username" />
<br />
<input type="submit">
</form>
这样就会在这个页面出错用户名那里就会出现乱码。
这里分析下出现乱码的原因:
主要有请求和响应中可能出现的乱码。
所谓响应中的乱码,就是显示页面上的乱码,因为页面数据是从服务器一端放入响应(response)中,然后发
送给浏览器,如果响应中的数据无法被正常解析,就会出现乱码问题。
为什么英文就没有问题呢?因为在iso-8859-1,gb2312, utf-8以及任意一种编码格式下,英文编码格式都
是一样的,每个字符占8位,而中文就麻烦了,在gb2312下一个中文占16位,两字节,而在utf- 8下一个中
文要占24位,三字节。浏览器在不知道确定编码方式的情况下,就会把这些字符从中间截断,再显示的时
候就乱掉了。所以,想要解决乱码问题,就是要告诉浏览器我们到底使用了什么样的编码方式。
解决方法:
#因为服务器要先从本地读取jsp文件,然后经过处理后写入响应,所以我们首先要知道的就是jsp文件的编
码格式。从问题的源头着手解决。在咱们用的windowxp下,文件默认的编码格式是gb2312。
#我们要在http的响应(response)中添加编码信息,使用如下方式:
<%@ page contentType="text/html; charset=gb2312"%>
#我们还需要在html中指定编码格式。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>title</title>
</head>
meta部分用来指定当前html的编码格式,注意这一段要放在head标签中,并且放到head标签的最前面,如果
不是最前面ie下可能会出现问题,尤其是在title中有中文的情况下。
**在完成了以上三个#好面的检验设置后,基本上能保证得到正确的中文显示了。
下面传到另外的页面也会产生乱码:我们的表单也就是form传递会有两种方式POST和GET,默认方式GET
在POST方式下面只要在接受的jsp页面上设置请求的字符编码就可以了如下:
<%
request.setCharacterEncoding("gb2312");
%>
但是在 GET方式下面就不管用了上面的方法,这样我们只有对每个中文进行转换了,使用new String
(bytes, "gb2312")进行转码。如下方式:
<%
String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso-8859-1");
String result = new String(bytes, "gb2312");
out.print(result);
%>
这样处理过程就是,先从request中获得参数,接着把字符串按照iso-8859-1编码打散成byte数组,然后
用gb2312编码组合成新字符串,最后打印出来就是正常的中文了。 **也可以写成一串如下:
<%=new String(new String(request.getParameter("username").getBytes("iso-8859-1"), "gb2312")%>
所以我们尽量设置传递的方式为POST这样就可以很简单的解决中文乱码问题。
<%@ page contentType="text/html;charset=gb2312"%>
productname是从何处得来,如果是后台,那么你需要加个过滤器进行转码,google上找一下,很多
10-1:javascript代碼寫在頁面的出現地址重寫頁面的最下方:
<script>
for(var i=0;i<document.links.length;i++){
document.links[i].href=encodeURI(document.links[i].href);
}
</script>
10-2:下面的代碼寫在接收參數的頁面中(有時候可能用不到就已經解決了問題)
在action(目的頁面)中,String s=request.getParameter("s");
s=new String(s.getBytes("iso-8859-1"),"gbk"); 以上,希望大家工作順利!