java乱码转换_java乱码问题(转)

参考:

C4 中文乱码

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

C4.1 HTML中文编码转换

在JSP文件中的静态文字显示乱码,则需要在

之间增加中文设置代码,如清单附C-5所示。

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

C4.2 JSP中文编码转换

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

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

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;

publicclass SetCharacterEncoding implements Filter {

@Override

publicvoid destroy() {

}

@Override

publicvoid doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

//设置字符编码

request.setCharacterEncoding("UTF-8");

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

chain.doFilter(request, response);

}

@Override

publicvoid init(FilterConfig arg0) throws ServletException {

}

}

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

清单附C-6 web.xml片段

SetCharacterEncoding

chapc.SetCharacterEncoding

SetCharacterEncoding

/*

方法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片段

port="8080"

protocol="HTTP/1.1"

redirectPort="8443"

URIEncoding="UTF-8"/>

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

1) form表单提交方法是get:

2) 在超链接中传递中文参数:

超链接传递中文参数测试

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

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

请修改成如:

String p = "中文参数";

//对中文参数编码

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

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

%>

以解决乱码问题。

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

String p = "中文参数";

//对中文参数编码

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

%>

超链接传递中文参数测试

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

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

请修改成:

function openWindow()

{

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

url = encodeURI(url);

open(url);

}

οnclick="openWindow();">

以解决乱码问题。

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

C4.3 MySQL数据库中文编码转换

在设定连接数据库URL时指定字符编码,可以确保数据正确的现实在网页上:

jdbc:mysql://localhost:3306/exam?useUnicode=true&characterEncoding=utf8;

C4.4 存在的问题与题外话

1. 存在问题

在第二节的第四部分提到了修改Tomcat根目录中conf子目录下的server.xml文件,以支持在URL中传递中文参数。

这种方法存在一个问题,就是Tomcat服务器下可能不止一个Web应用,而多个Web应用的编码又不一样,这个时候就不能修改server.xml了。可以尝试采用:

String p = new String(p.getBytes(“源编码”),”目标编码”)

源编码可以是:ISO-8859-1、GB2312和GBK等合法编码;

目标编码为:UTF-8、GBK和GB2312等合法编码。

用户在使用这个方法的时候需要确定源编码和目标编码各是什么,才能解决中文乱码问题。

2. 题外话

数据库的编码问题除了可以修改连接URL之外,也可以采用方法:

String p = new String(p.getBytes(“源编码”),”目标编码”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值