在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中文乱码相关推荐

  1. jquery.ajax的url中传递中文乱码问题的解决方法

    jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuer ...

  2. request、response 中文乱码问题与解决方式

    request.response 中文乱码问题与解决方式 request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向 ...

  3. ajax 传输中文乱码,关于Ajax请求中传输中文乱码问题的解决方案

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  4. 如何解决oracle中文乱码问题,oracle中解决中文乱码问题

    中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 查到结果是: USERENV('LANGUAGE') --------------- ...

  5. ajax中解决乱码的问题,关于Ajax请求中传输中文乱码问题的解决方案

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  6. springMVC中URL中文乱码问题

    解决springMVC中URL中文乱码问题 问题: 在java控制器里面如果转发或重定向的URL中有中文,那么请求该URL时就会造成乱码,导致访问出错. 事例 @RequestMapping(&quo ...

  7. xajax中的中文乱码问题

    xajax中的中文乱码问题 PHP里XAJAX是个比较好的框架,但也存在中文乱码问题,原因是 POST过来的数据是UTF-8,而你整个站点是用GB2312来显示,那么所有 的中文字符将全部变成乱码. ...

  8. 总结:SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题

    2019独角兽企业重金招聘Python工程师标准>>> 以下是 SpringMVC 中 GET 和 POST 方式请求中的中文乱码问题的解决方法. 1,GET 方式中文乱码: 修改t ...

  9. vscode新建html中文乱码,vscode中html中文乱码 怎么办

    vscode中html中文乱码 怎么办?VSCode 中文乱码解决办法 文件 >> 首选项 >> 设置 搜索:"files.autoGuessEncoding&quo ...

最新文章

  1. Python 传值和传址 copy/deepcopy
  2. VC++网络资源集合
  3. HDOJ 1071 The area (纯数学题)
  4. 【并查集】 HDU 4424 Conquer a New Region 贪心
  5. 生产模式MTOMTS的区别
  6. Tar打包、压缩与解压缩到指定目录的方法
  7. 百万级并发 Node.js也能行
  8. [JavaWeb-JavaScript]JavaScript与html结合方式
  9. LeetCode 337. 打家劫舍 III(记忆化+递归)
  10. 【离散数学】集合的包含排斥原理
  11. 《VMware vSphere 6.5企业运维实战》已经出版
  12. docker run命令_CVE-2019-14271:Docker cp命令漏洞分析
  13. w7设置双显示器_怎么在windows7系统下设置双显示器
  14. 摇号系统怎么做_雨水收集系统怎么做
  15. linux 权限rwx(4,2,1)详细说明
  16. c语言代码格式的简单介绍
  17. 信捷PLC之C函数编程(一)
  18. netsetman使用教程_人性化的IP切换工具—NetSetMan
  19. windows下安装ruby(一)
  20. 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程

热门文章

  1. 异步复位和同步释放电路的详细解释
  2. pywebio 之词云图
  3. AUTOML 和 NAS 的真谛
  4. 计算一个全息图片的两个设想
  5. 一起因网线问题引起的网络故障的解决过程
  6. Activity一共有以下四种launchMode
  7. javascript体系-DOM原理
  8. NameNode任务线程之FSNamesystem$ReplicationMonitor
  9. 关于“Ambiguous match found”
  10. Java项目:基于Jsp实现网上定餐系统