非西文字符的乱码问题解决方法

使用JavaWeb技术编写web应用程序,乱码问题常常让人头疼。 这里的乱码问题通常可以分为三种情况,分别是:

  1. servlet显示中文乱码。
  2. servlet读取表单提交的数据乱码。
  3. 连接数据库乱码。

Java的内核和Class文件是基于Unicode的,这使Java程序具有良好的跨平台性,但也带来了一系列乱码问题的麻烦。原因主要有两方面,即:

  1. Java本身编译时产生的乱码问题。
  2. 以及Java程序与其他媒介交互产生的乱码问题。

编写代码时,要保证整个应用程序编码格式统一到一个可以显示所有字符的编码上就可以了。

1.首先来看一下与表单数据提交的编码问题。当在浏览器的表单输入中文的时候,如果在接收这些数据的servlet中不加任何处理直接读取数据,这个数据就是乱码的。原因是客户端提交的数据在提交给服务器的时候,传输的数据编码格式是ISO-8859-1。这种编码格式是不能显示中文的,也和服务器上servlet使用编码格式不同。这个时候我们可以采用类似于如下的方式将其转换过来。

String str = new String( param.getBytes("ISO-8859-1"),"UTF-8");

上面的程序中需要转换的编码格式和系统的默认设置有关,不一定是UTF-8,在中文系统下也有可能是GB2312或者是GB13080。

当然每个数据都用这样的方式转换的话,效率会非常低下。也有比较简单的方法,在读取数据之前使用request对象的setCharacterEncoding(String encode)来设定转换关系。如:

request.setCharacterEncoding("UTF-8");

注意:

  1. 使用这样的方式对于客户端使用GET请求没有效果,原因很简单,GET请求,数据在URL里,而且数据经过特殊的编码处理,不能这样简单的转换。
  2. 一定在读取数据之前进行设定,否则也没有效果。

2.解决了数据提交的乱码问题,再看数据显示的乱码问题。当使用servlet在输出非西字符的时候,也会出现乱码。原因在于客户端的浏览器也不知道用什么样的方式来解释从服务器上得到的数据。这个时候需要使用response对象上的方法加以设定。有两种选择:

第一种:

response.setContentType("text/html;charset=UTF-8");

第二种:

response.setCharacterEncoding("UTF-8");

通过这样的设定,基本上就能解决数据显示的乱码问题。

3.最后说一下访问数据库的乱码问题。对于数据库的访问,也会产生乱码问题。主要在于数据库中存储的数据格式或者不能有效的存储我们的数据,或者是数据存储的编码格式和程序中使用的编码格式不一致造成的。解决的方案只有一点,就是把这些数据的编码格式统一。

4.补充: tomcat服务器配置字符集为utf-8-彻底解决中文乱码问题 程序编写的过程中遇到各种中文编码的问题时候,需要在程序中很多环节中去进行过滤和转义,依旧有可能遇到乱码,下面的方法,百试不爽,是针对于tomcat服务器来说的。 此外,这个方法并不会对之前的那些方法造成冲突。

在tomcat服务器根目录下找到配置文件,路径如下:

在tomcat服务器根目录下/conf目录/server.xml文件

在下列语句(设置端口的语句)后加上:

<
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
 redirectPort="8443"  
/>

URIEncoding="UTF-8"。

设置后为:

<
Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
 redirectPort="8443"  
URIEncoding="UTF-8"
/>

最后啰嗦一下: 解决乱码问题的基本原则就是保证应用的前台和后台编码格式统一。这句话说起来简单,但是在真正开发中,苦逼的不断总结吧猿们~

转载于:https://my.oschina.net/u/1265669/blog/822540

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值