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

使用JavaWeb技术编写web应用程序,乱码问题经常让人头疼。 这里的乱码问题一般能够分为三种状况,分别是:html

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

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

  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。tomcat

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

request.setCharacterEncoding("UTF-8");

注意:编码

  1. 使用这样的方式对于客户端使用GET请求没有效果,缘由很简单,GET请求,数据在URL里,并且数据通过特殊的编码处理,不能这样简单的转换。
  2. 必定在读取数据以前进行设定,不然也没有效果。

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

第一种:server

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

第二种:xml

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"
/>

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

相关文章
相关标签/搜索