Java搭建servlet时doGet方法中文乱码问题
2015-08-11 19:59
483 查看
在搭建servlet时,用request获得网页传输的数据以及用response返回给网页数据时会出现中文乱码的问题。那么我们应该如何解决这个问题?
编码格式的异同主要由于以下方面:
(1)tomcat编码格式
Apache提供的tomcat服务器中对接收的数据以及返回的数据有一定的编码格式,这个编码是tomcat安装包“apache-tomcat-7.0.63”中的conf文件夹下的server.xml配置文件。我们可以通过更改该配置文件的,在其最后加入
(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配置文件中添加
(2). 其次在doGet方法中增加一句语句,将网页对服务器返回的语句以GBK编码格式输出。
但是这个方法并没有将问题完全解决,这一步只是确保服务器传输给网页的数据能够正常显示,但不能够保证网页传回的数据可以正常显示。因为网页数据的输入是以 ISO-8859-1的编码格式编码的,用GBK进行获得依然会乱码。
好啦,现在上重点,说一下博主老师教的方法, 可以真正的解决问题:
(1). 网页返回的数据时以 ISO-8859-1的编码格式输入的,首先我们要先将网页输入的数据变成UTF-8编码格式的数据。我们可以再自己的工程中创建一个Encoding类,用于转换编码格式。类定义入如下:
(2). 将Eclipse编码格式设置为UTF-8。设置位置在上文中以提到。一般Eclipse默认的编码格式是GBK。
通过以上两步就可以保证从网页中传回的数据可以正常显示了。
(3). 在doGet方法中添加语句如下:
或者
将网页对服务器传回的数据设置为UTF-8编码格式。这样就可以保证网页接收到服务器并输出的数据可以正常显示了!
噢啦,问题解决!
乱码的原因
要想解决该问题首先要知道为什么会出现这种问题,问题出现是因为使用的创建按工具都有自己的编码格式,由于在使用它们创建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——线程
- Java基础-多线程
- (3.1.4.2)struts1和struts2
- MyEclipse10破解教程
- java实现打开文件和保存文件功能
- JavaWap基础
- 《Java开发实战经典》第三章答案3.12
- 《Java开发实战经典》第三章答案3.11
- 《Java开发实战经典》第三章答案3.10
- Java I/O 详解
- 《Java开发实战经典》第三章答案3.9
- 《Java开发实战经典》第三章答案3.8
- 《Java开发实战经典》第三章答案3.7
- 《Java开发实战经典》第三章答案3.5
- 《Java开发实战经典》第三章答案3.4
- 使用java的迭代器对list进行遍历
- eclipse store password unencrypted
- 《Java开发实战经典》第三章答案3.3
- 《Java开发实战经典》第三章答案3.2
- 《Java开发实战经典》第三章答案3.1