在servlet中用outputStream输出数据以及中文数据的问题

本文探讨了在使用servlet的outputStream输出数据时,特别是处理中文字符时可能出现的乱码问题,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在servlet中用outputStream输出数据以及中文数据的问题

今天学习了servlet中比较重要的一个知识点,在servlet中用reponse对象的outputStream输出数据以及中文数据的问题。
首先,在servlet中向浏览器写数据(ps:其实这样说并不明确,准确点是想response中写数据,浏览器发现reposonse中有数据,就会读出来),向浏览器中输出数据:1.0版本
String data = "中国";
OutputStream outputStream = response.getOutputStream();
outputStream.write(data.getBytes());
这样写的话在浏览器中就会看到中国两个字,但是如果在向浏览器写数据的时候加入了编码方式,结果就不太一样了。
如下列代码:1.1版本
String data = "中国";
		OutputStream outputStream = response.getOutputStream();
		outputStream.write(data.getBytes("UTF-8"));
这样的话在浏览器看到的就不是中国了,而是涓浗两个字,这其中的原因是什么呢,看下图:


这是我自己画的一张图,解释一下,当servlet向浏览器传中国两个字的时候,传过去的并不是中国两个字,而是servlet指定的码表中对应的数字,传给浏览器的是98 99两个数字,而ie指定的是gb2312码表,所以98 99 是对应涓浗二字。那么如才能解决以上问题,有三种方法:
1 手动在浏览器中改变编码方式。
2 在servlet response中写一个http响应头,并指定html文本的编码方式:
response.setHeader("Content-type", "text/html;charset=UTF-8");//注意一定要Content-type否则浏览器会认为是下载!!!
		String data = "中国";
		OutputStream outputStream = response.getOutputStream();
		outputStream.write(data.getBytes("UTF-8"));

3 用html的meta标签模拟http响应头,由于ie浏览器等是一个http解析器,会解析html语言。
String data = "中国";
		OutputStream outputStream = response.getOutputStream();
		outputStream.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
		outputStream.write(data.getBytes("UTF-8"));
总而言之:程序以什么码表输出了,程序就一定要控制浏览器用什么码表打开。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值