Java乱码问题

一、尽量配置环境字符集均为UTF-8

Eclipse、IEDA、Mysql、JSP均指定UTF-8

需要在项目开发和编译时指定字符集UTF-8。Eclipse就直接设置整个项目的属性即可。

Windows -> Preferences -> Gengral -> Workspace

 

Windows -> Preferences -> Gengral -> Content Types -> Text

Windows -> Preferences -> Web -> (CSS Files、Html Files、JavaServer Face、Jsp Files)

Windows -> Preferences -> JSON -> JSON File

二、在JSP的头部进行声明

<%@ pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%>

三、使用过滤器,所有请求都要经过servlet控制分配器,在servlet的filter设置统一

 Filter设置字符集对get提交方式并不起作用,所以还有一种方式,是配置服务器。一Tomcat为例:Tomcat的配置文件中:.me_tcat/conf/server.xml,如下图:

打开进行如下修改:

四、设定数据库连接方式为UTF-8

以Mysql连接为例,在连接Mysql配置url时:

<?xmlversion="1.0" encoding="UTF-8"?>

<config>

<db-info>

<driver-name>com.mysql.jdbc.Driver</driver-name>

<url>jdbc:mysql://localhost:3306/drp?characterEncoding=UTF-8</url>

<user-name>root</user-name>

<password>123456</password>

</db-info>

</config>

 以Oracle连接为例:

sqlplus
请输入用户名:  sys as sysdba      输入口令:
shutdown immediate;
startup mount;
alter system enable restricted session;
alter system set job_queue_processes=0;
alter system set aq_tm_processes=0;
alter database open;
alter database character set internal_use utf8;
shutdown immediate;
startup;

五、数据库设置为UTF-8

六、JSP与页面参数之间的乱码转换

Request.setCharacterEncoding("UTF-8");//从请求中获取参数出现乱码

response.setContentType("text/html;charset=GBK");//将变量输出到页面时出现乱码

    这种情况综合起来还是直接使用过滤器比较合适。

七、对中文采用Java.net.URLEncoder.encode()进行编码

 URLEncoder.encode("某中文", "GB18030")

八、代码手动修改

      如果在其他地方还出现乱码,可能需要手动修改代码

String test=newString(name.getBytes("gbk"),"utf-8");

九、IE浏览器中文乱码

      IE和火狐对URL的处理不同,浏览器在传输URI时得对URL进行编码,IE默认是以UTF_8来传输的,Firefox是GBK来编码,如果不对中文参数进行处理,中文字符经过各个浏览器以各自的方式传输到服务器后就出现了各种编码方式,而服务器却只能以一种编码方式来对接收到得URL进行解码,这样的话和服务器使用的编码方式一致的浏览器在传中文参数时没问题,不一致的就会有问题。

在参数传递之前就进行编码,后台获取参数时再解码即可,并且这种方式可以很好的处理浏览器兼容性问题。

js代码:

var url =encodeURI("transport/viewTransitList.do?searchOption="

+ searchOption + "&searchCondition="

+ searchCondition);

Controller代码:

String searchCondition=request.getParameter("searchCondition");

try {

searchCondition = java.net.URLDecoder.decode(searchCondition, "UTF-8");// 解码

searchCondition = new String(searchCondition.getBytes("iso-8859-1"), "utf-8");


} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值