servlet中response中文乱码
在servlet中,通过response向浏览器写中文,会出现乱码,那么response向浏览器写数据一共有两种方式
1.getOutputStream.write();字节流
2.PrintWriter.write();字符流
我们都知道,字节流可以读写任何的数据,而字符流只能读写字符数据。
这里是怎么把我们servlet的数据写到浏览器的,要说一下,这里是我们把数据先写进response里面,然后服务器看到response里面有数据,那么这时服务器才写给浏览器,才会显示我们要写入的数据。简单的画张图。
首先说第一种写入getOutputStream.write();字节流,通过这个流来写中文,是没有问题的,代码
1 String data = "中国"; 2 3 OutputStream out = response.getOutputStream(); 4 out.write(data.getBytes());
上面这样做是没有问题的,注意,但是我们要实现国际化,这里我们就不能不修改,我们正常用的是UTF-8,那我们就改成utf-8,注意我们是在data转成字节时改,
1 String data = "中国"; 2 3 OutputStream out = response.getOutputStream(); 4 out.write(data.getBytes("utf-8"));
这样一改就肯定会乱码,我们在这里转成字节的时候用的utf-8的码表,而浏览器默认的是什么啊,是gb2312,这肯定乱码嘛,你用utf-8码表去对应gb2312,肯定会出问题,怎么修改
我们通过设置响应头,来规定浏览器你就按这个码表去查,就没问题,设置响应头,设置content-type
1 response.setHeader("content-type", "text/html;charset=utf-8"); 2 String data = "中国"; 3 4 OutputStream out = response.getOutputStream(); 5 out.write(data.getBytes("utf-8"));
这样一来的话浏览器就会按照utf-8去差,就不会出现乱码的问题,修改这个问题还有一个方法,我们在学习html的时候,这个meta标签可以模拟代替一个响应头,我们通过设置这个meta也可以做到
1 String data = "中国"; 2 3 OutputStream out = response.getOutputStream(); 4 out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes()); 5 out.write(data.getBytes("utf-8"));
这样做也是可以的,运行,我们可以看一下这个网页的源码
下面说一下PrintWriter.write();字符流
1 String data = "中国"; 2 3 PrintWriter print = response.getWriter(); 4 print.write(data);
这样写的话浏览器会给我显示两个问号,问什么是两个问号呢?,因为这个字符流底层用的iso-8859-1的码表,老外写的嘛,老外就喜欢用这个,那我们应该这样转码
1 String data = "中国"; 2 response.setCharacterEncoding("utf-8"); 3 response.setHeader("content-type", "text/html;charset=utf-8"); 4 PrintWriter print = response.getWriter(); 5 print.write(data);
response.setCharacterEncoding("utf-8");设置response用什么码表,达到控制response以什么码表像浏览器写数据的目的
response.setHeader("content-type", "text/html;charset=utf-8");用这个来设置浏览器用什么码表对应我们的数据。
这样一来我们的文字有变成我们想要的文字了,但是设置API的人知道这两句话是常用的,经常写的,防止代码的冗余,我们可以这样写,就代替了这两句话,但是我们要明白里面是怎么做的。
1 String data = "中国"; 2 response.setContentType("text/html;charset=utf-8"); 3 PrintWriter print = response.getWriter(); 4 print.write(data);
response.setContentType("text/html;charset=utf-8");这一段代码就做了上面两句代码的事情,如果你去查看源码的话,你就明白了。
转载于:https://www.cnblogs.com/duwenlei/p/3490342.html
servlet中response中文乱码相关推荐
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...
- request、response 中文乱码问题与解决方式
request.response 中文乱码问题与解决方式 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向 ...
- ajax 传输中文乱码,关于Ajax请求中传输中文乱码问题的解决方案
今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...
- 如何解决oracle中文乱码问题,oracle中解决中文乱码问题
中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...
- ajax中解决乱码的问题,关于Ajax请求中传输中文乱码问题的解决方案
今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...
- springMVC中URL中文乱码问题
解决springMVC中URL中文乱码问题 问题: 在java控制器里面如果转发或重定向的URL中有中文,那么请求该URL时就会造成乱码,导致访问出错. 事例 @RequestMapping(&quo ...
- xajax中的中文乱码问题
xajax中的中文乱码问题 PHP里XAJAX是个比较好的框架,但也存在中文乱码问题,原因是 POST过来的数据是UTF-8,而你整个站点是用GB2312来显示,那么所有 的中文字符将全部变成乱码. ...
- 总结:SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题
2019独角兽企业重金招聘Python工程师标准>>> 以下是 SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题的解决方法. 1,GET 方式中文乱码: 修改t ...
- vscode新建html中文乱码,vscode中html中文乱码 怎么办
vscode中html中文乱码 怎么办?VSCode 中文乱码解决办法 文件 >> 首选项 >> 设置 搜索:"files.autoGuessEncoding&quo ...
最新文章
- Python 传值和传址 copy/deepcopy
- VC++网络资源集合
- HDOJ 1071 The area (纯数学题)
- 【并查集】 HDU 4424 Conquer a New Region 贪心
- 生产模式MTOMTS的区别
- Tar打包、压缩与解压缩到指定目录的方法
- 百万级并发 Node.js也能行
- [JavaWeb-JavaScript]JavaScript与html结合方式
- LeetCode 337. 打家劫舍 III(记忆化+递归)
- 【离散数学】集合的包含排斥原理
- 《VMware vSphere 6.5企业运维实战》已经出版
- docker run命令_CVE-2019-14271:Docker cp命令漏洞分析
- w7设置双显示器_怎么在windows7系统下设置双显示器
- 摇号系统怎么做_雨水收集系统怎么做
- linux 权限rwx(4,2,1)详细说明
- c语言代码格式的简单介绍
- 信捷PLC之C函数编程(一)
- netsetman使用教程_人性化的IP切换工具—NetSetMan
- windows下安装ruby(一)
- 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程