在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文本的编码方式:
3 用html的meta标签模拟http响应头,由于ie浏览器等是一个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"));
总而言之:程序以什么码表输出了,程序就一定要控制浏览器用什么码表打开。