JSP HTML JAVASCRIPT 中文乱码 解决方案 大全

SP HTML JAVASCRIPT 中文乱码 解决方案 大全 


  JSP的中文字符一直是各位初学者首先要解决的问题,下面进行了总结,也给出了解决办法。

C4.1 HTML中文编码转换

 在JSP文件中的静态文字显示乱码,则需要在<head></head>之间增加中文设置代码,如清单附C-5所示。

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

 charset指定UTF-8字符集,当然也可以指定其他支持中文的编码,如GBK和GB2312。但是整个Web应用中一定要统一一种编码,本书推荐统一为UTF-8编码。

C4.2 JSP中文编码转换

  针对Tomcat下动态内容的中文乱码问题,有以下几个解决办法:

1. 在每个JSP文件的开头增加如下代码:

<%@ page language="java" contentType="text/html;charset=UTF-8"

  pageEncoding="UTF-8"%>

2. 设置编码参数:

request.setCharacterEncoding("UTF-8");

3. 使用编码过滤器。创建过滤器类SetCharacterEncoding,源码如清单附C-5所示。

清单附C-5 SetCharacterEncoding.java

package chapc;

 

import java.io.IOException;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

public class SetCharacterEncoding implements Filter {

 

  @Override

  public void destroy() {  

  }

 

  @Override

  public void doFilter(ServletRequest request, ServletResponseresponse,

  FilterChain chain) throws IOException, ServletException{

  //设置字符编码

  request.setCharacterEncoding("UTF-8");

  //将控制传到下一个过滤器,如果没有过滤器则传到被调用者

  chain.doFilter(request, response);

  }

 

  @Override

  public void init(FilterConfig arg0) throws ServletException{

  }

}

 过滤器类还需要在web.xml中进行配置,设定要过滤哪些请求。过滤器在web.xml中的配置如清单附C-6所示。

清单附C-6 web.xml片段

<filter>

 <filter-name>SetCharacterEncoding</filter-name>

 <filter-class>chapc.SetCharacterEncoding</filter-class>

</filter>

<filter-mapping>

 <filter-name>SetCharacterEncoding</filter-name>

 <url-pattern>/*</url-pattern>

</filter-mapping>

 方法1、方法2和方法3经常需要使用,但它们一般不是独立使用,而是两两结合:1和2结合;1和3结合。附录A中的示例用到了1和2的结合。第四章Hibernate中的信息发布系统用到了1和3的结合。

4.修改Tomcat根目录中conf子目录下的server.xml文件,在中加入URIEncoding="UTF-8",如清单附C-7所示。

清单附C-7 server.xml片段

<Connector connectionTimeout="20000"

  port="8080"

  protocol="HTTP/1.1"

  redirectPort="8443"

  URIEncoding="UTF-8"/>

 该方法用来解决浏览器地址栏中的传递中文参数导致的乱码问题。浏览器地址栏传递参数(URL传参)一般表现为三种情况:form表单的get方法提交、超链接传参和response传参。

Ø form表单提交方法是get:

<form action="registerProcess.jsp"method="get">

Ø 在超链接中传递中文参数:

<ahref="a.jsp?p=中文参数">超链接传递中文参数测试</a>

5. 如果是调用response.sendRedirect传递中文参数产生的乱码,如:

response.sendRedirect("a.jsp?p=中文参数");

请修改成如:

<% //引入URLEncoder %>

<%@pageimport="java.net.URLEncoder"%>

<%

String p = "中文参数";

//对中文参数编码

p = URLEncoder.encode(p, "UTF-8");

response.sendRedirect("a.jsp?p=" + p);

%>

以解决乱码问题。

  如果方法4还不能解决某些超链接传参乱码问题,请使用方法5,如下:

<%@pageimport="java.net.URLEncoder"%>

<%

String p = "中文参数";

//对中文参数编码

p = URLEncoder.encode(p, "UTF-8");

%>

<a href="a.jsp?p=<%=p%>">超链接传递中文参数测试</a>

6. JavaScript中如果出现URL传参乱码问题,如:

open("a.jsp?p=中文参数");

请修改成:

<script type="text/javascript">

function openWindow()

{

  var url = "a.jsp?p=中文参数"; 

  url = encodeURI(url);

  open(url);

}

</script>

<input type="button" value="JavaScript中文参数"

  onclick="openWindow();">

以解决乱码问题。

JavaScript中的open方法打开浏览器窗口,传递参数,其本质也是URL传参。一般方法4就可以很好的解决中文参数乱码问题。如果方法4不生效,才考虑方法六。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值