`
sw1982
  • 浏览: 504220 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ServletOutputStream回写页面乱码

 
阅读更多

一段utf-16的string,整了好多种格式,硬是无法正确输出到页面上:

 

首先尝试了outputstream, 即便指定string-》byte[]的编码,还是出错

 

resp.getOutputStream().write(out.getBytes("UTF-16"));
resp.getOutputStream().print(out);
resp.getOutputStream().flush();
resp.getWriter().close(); 

然后尝试过Printwriter,均以失败告终。

 

 

借此也搞明白了response回写内容的两个方法:(指上面的writer和outStream)

1.PrintWriter object that can send character text to the client.

2.ServletOutputStream suitable for writing binary data in the response

3.Calling flush() on the xxx  commits the response.

4.Either getOutputStream() or getWriter() may be called to write the body, not both.

 

但是比较诡异的是,为什么这两种方式(指上面的writer和outStream)会出现乱码呢?

再看看编码解析的过程:

uses the character encoding returned by getCharacterEncoding().

  首先使用response对象的getCharacterEncoding(),如果没有设置,则默认编码方式都为ISO-8859-1

 

那么问题也就明确了,在输入流指定正确的编码之后,还需要配合response的编码参数,否则读出来解析就乱码

 

正解

//方式1
resp.setCharacterEncoding("UTF-16");
resp.getWriter().print(out);
resp.getWriter().flush();
resp.getOutputStream().close();

//方式2
resp.setCharacterEncoding("UTF-16");
resp.getOutputStream().write(out.getBytes("UTF-16"));
resp.getOutputStream().flush();
resp.getOutputStream().close();

 

 再或者,包装一层: 

 

ServletOutputStream out2 = resp.getOutputStream(); 
OutputStreamWriter ow = new OutputStreamWriter(out2,"UTF-16"); 
ow.write(out); 
ow.flush(); 
ow.close(); 

 

 

分享到:
评论

相关推荐

    BufferedOutputStream 介绍_动力节点Java学院整理

    BufferedOutputStream 是缓冲输出流。它继承于FilterOutputStream。 BufferedOutputStream 的作用是为另一个输出流提供“缓冲功能”。

    将输出流OutputStream转化为输入流InputStream的方法

    NULL 博文链接:https://shihuan830619.iteye.com/blog/2094068

    handleStream ServletOutputStream out = response.getOutputStream(); InputStream i

    NULL 博文链接:https://nethub2.iteye.com/blog/2023937

    JSP severlet 动态 base64 编码 图片 显示处理

    JSP severlet 动态 base64 编码 图片 显示处理

    HttpServletResponse

    HttpServletResponse。。案例一、完成文件下载 案例二、生成验证码(了解)。...所以文件下载需 要IO技术将服务器端的文件使用InputStream读取到,在使用 ServletOutputStream写到response缓冲区中。。

    jdk1.6java开发环境配置必备

    jdk1.6 很好用,java开发环境配置必备 解压后就可以配置

    JSF文件下载实现

    ServletOutputStream servletOutputStream = response.getOutputStream(); byte[] b = new byte[1024]; int i = 0; FileInputStream fis = new java.io.FileInputStream(realName); while ((i = fis.read(b)) > 0)...

    spring-mock-2.0-rc3.jar

    DelegatingServletOutputStream: ServletOutputStream接口的委托mock实现,在需要拦截和分析写向一个输出流的内容时,可以使用它。 说明:在提供关于Controller(控制器)的测试时,以上这些对象是最常用的。

    Servlet实现文件下载功能

    主要为大家详细介绍了Servlet实现文件下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    jsp 实现文件读入下载功能

    文件下在,不是点的URL连接下载,是从系统中得到该文件后读入jsp页面中再次下载,此文件利用 response对象,setContentType(“”),setHeader,ServletOutputStream,out等方法

    tomcat何时写回响应数据报的详析

    疑问的产生 这个疑问是我在写文件下载的时候产生的,我是用HttpServletResponse获取到Outputstream,然后利用OutputStream直接写数据的。当时我就想这个OutputStream... * Returns a {@link ServletOutputStream} s

    poi导出excel所用jar包,可添加至maven仓库,也可以自己配置,适合各种浏览器

    ServletOutputStream outputStream = response .getOutputStream(); //输出 hssfWorkbook.write(outputStream); // 关闭 hssfWorkbook.close(); //System.out.println("导出成功"); return "success"; }

    java web技术开发大全(最全最新)

    4.2.8 实例:用ServletOutputStream显示图像 4.2.9 实例:使用RequestDispatcher包含Web资源 4.2.10 实例:使用RequestDispatcher转发Web资源 4.3 HttpServletResponse类的其他功能 4.3.1 产生状态响应码 ...

    excel-template-export.rar

    ServletOutputStream out = response.getOutputStream(); bis = new BufferedInputStream(inputStream); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; //读取并写入 ...

    java web开发技术大全

    4.2.8 实例:用ServletOutputStream显示图像 4.2.9 实例:使用RequestDispatcher包含Web资源 4.2.10 实例:使用RequestDispatcher转发Web资源 4.3 HttpServletResponse类的其他功能 4.3.1 产生状态响应...

    jsp内置对象的用法

    2 ServletOutputStream getOutputStream() 返回响应的一个二进制输出流 3 PrintWriter getWriter() 返回可以向客户端输出字符的一个对象 4 void setContentLength(int len) 设置响应头长度 5 void ...

    jquery实现excel导出的方法

    所以从页面的表格中获得数据保存成本地文件的办法是行不通了. 我们想要导出的是表格中的数据,表格中的数据又是从服务器来的,那我们把服务器上的数据下到本地保存成文件不就可以了. 服务端实现代码: 代码如下:...

    InputStream与OutputStream及File间互转

    InputStream与OutputStream及File间互转

    J2EE中文版.chm

    java开发web的帮助文档,内含Cookie GenericServlet HttpServlet HttpServletRequest HttpServletResponse ...ServletOutputStream ServletRequest ServletResponse SingleThreadModel UnavailableException

    学习servlet的实例和参考api

    类 ServletConfig ServletOutputStream ServletContext ServletInputStream ServletResponse GenericServlet ServletRequest Servlet <br>javax.servlet.http<br>接口 类 HttpSession Cookie...

Global site tag (gtag.js) - Google Analytics