Java搭建servlet时doGet方法中文乱码问题

  在搭建servlet时,用request获得网页传输的数据以及用response返回给网页数据时会出现中文乱码的问题。那么我们应该如何解决这个问题?

乱码的原因

  要想解决该问题首先要知道为什么会出现这种问题,问题出现是因为使用的创建按工具都有自己的编码格式,由于在使用它们创建servlet时没有统一编码格式,所以会出现乱码的问题。
编码格式的异同主要由于以下方面:
(1)tomcat编码格式
  Apache提供的tomcat服务器中对接收的数据以及返回的数据有一定的编码格式,这个编码是tomcat安装包“apache-tomcat-7.0.63”中的conf文件夹下的server.xml配置文件。我们可以通过更改该配置文件的,在其最后加入URIEncoding="UTF-8"一句,将其编码格式更改为UTF-8或其他指定的编码格式。

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

(2)Eclipse编码格式
  用Eclipse搭建servlet,Eclipse中也有相应的编码格式,他的编码在工程上右键,选择Properties,在弹出的对话框中可以进行设置。
  
(3)JVM虚拟机编码格式
  虚拟机在将java文件编译成字节码文件时是采用的UTF-8编码。

(4)HTML编码格式
  在使用网页向servlet服务器返回数据时,不同的网页也采用不同的编码格式。网页接收来自服务端的数据,对数据的解析也有编码格式。

  正是由于各方面都存在编码格式上的问题,一直与我们在使用doGet方法是出现乱码的情况。

中文乱码的解决

  其实在百度上进行搜索不乏有很多解决方案,博主也尝试过很多,但是并不能在根本上解决问题。这里说一下博主学习的解决方法:
  刚开始我使用的是修改sevice.xml文件的方法:(这是从网上百度的方法)
(1). 首先在apache-tomcat-7.0.63”中的conf文件夹下的server.xml配置文件中添加URIEncoding="GBK"一句,添加在如下的位置。将其编码格式更改为GBK编码。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

(2). 其次在doGet方法中增加一句语句,将网页对服务器返回的语句以GBK编码格式输出。
response.setContentType("text/html; charset=GBK");

   但是这个方法并没有将问题完全解决,这一步只是确保服务器传输给网页的数据能够正常显示,但不能够保证网页传回的数据可以正常显示。因为网页数据的输入是以 ISO-8859-1的编码格式编码的,用GBK进行获得依然会乱码。

好啦,现在上重点,说一下博主老师教的方法, 可以真正的解决问题:
(1). 网页返回的数据时以 ISO-8859-1的编码格式输入的,首先我们要先将网页输入的数据变成UTF-8编码格式的数据。我们可以再自己的工程中创建一个Encoding类,用于转换编码格式。类定义入如下:

import java.io.UnsupportedEncodingException;
public class Encoding {
    public static String encoding(String string){
        try {
            //将输入ISO-8859-1编码格式的字符串转换为字节数组。
            byte[] b = string.getBytes("ISO-8859-1");
            //将字节数组转化为UTF-8编码格式的字符串
            string = new String(b, "UTF-8");
        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();
        }
        //返回字符串
        return string;      
    }
}

(2). 将Eclipse编码格式设置为UTF-8。设置位置在上文中以提到。一般Eclipse默认的编码格式是GBK。

  通过以上两步就可以保证从网页中传回的数据可以正常显示了。  

(3). 在doGet方法中添加语句如下:
response.setHeader("Content-type", "text/html; charset=UTF-8");
或者
response.setContentType("text/html; charset=UTF-8");
  将网页对服务器传回的数据设置为UTF-8编码格式。这样就可以保证网页接收到服务器并输出的数据可以正常显示了!
  噢啦,问题解决!

你可能感兴趣的:(java,servlet,中文乱码)