java dopost 请求结果乱码_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或其他指定的编码格式。

connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="UTF-8" />1

2

31

2

3

(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编码。

connectionTimeout="20000"

disableUploadTimeout="true" URIEncoding="GBK" />1

2

3

100252767_1.png

100252767_1.png1

2

3

(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;

}

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

161

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

(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编码格式。这样就可以保证网页接收到服务器并输出的数据可以正常显示了!

噢啦,问题解决!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值