`
sw1982
  • 浏览: 511265 次
  • 性别: 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(); 

 

 

分享到:
评论

相关推荐

    servlet与jsp中文乱码处理

    - **JSP标签乱码**:如果使用`<%= %>`或`<jsp:expression>`标签输出中文,需确保页面编码正确。 - **表单提交乱码**:对于POST请求,需在JSP中设置请求编码,例如`<form method="post" accept-charset="UTF-8">`。...

    解决jfreechart中文乱码方案整理.doc

    2. **编码问题**:如果JSP页面或者图表生成过程中处理不当,也会导致中文乱码。 3. **环境配置问题**:服务器环境的字体配置或者相关环境变量设置不正确。 #### 解决方案概述 解决JFreeChart中文乱码的方法主要集中...

    解决JSP字符串乱码的过滤器

    本教程将详细介绍如何通过实现一个过滤器(Filter)来解决JSP页面中的字符串乱码问题。 首先,我们需要理解字符编码的基础知识。字符编码是用来表示文本的一套规则,常见的有ASCII、GBK、UTF-8等。在Web应用中,...

    无中文乱码的Struts上传下载(任意文件上传)

    提供的压缩文件`struts实现上传下载源码及文档`应该包含了完整的实现示例,包括Action类、ActionForm、JSP页面以及使用说明。通过阅读源码和文档,你可以更深入地理解如何在实际项目中应用这些技术。 总之,解决...

    详解Spring MVC3返回JSON数据中文乱码问题解决

    当在Web页面上显示中文时,可能会出现乱码现象,而这个问题会严重影响用户体验和数据的准确性。 在Java Web开发中,Spring MVC框架被广泛使用。当控制器(Controller)需要向客户端返回JSON数据时,可能会遇到中文...

    Java response响应体和文件下载实现原理

    因此,我们需要在代码中指定浏览器解析页面的编码方式,通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8。 例如: ```java response.setContentType("text/html;charset=UTF-8"); ``` ...

    Web_3_Request和Response1

    响应数据可以通过ServletResponse的getOutputStream()获取ServletOutputStream来发送二进制数据,或通过getWriter()获取PrintWriter对象来发送字符数据。设置MIME正文的字符编码和内容类型是通过setCharacter...

    Java程序员需要的面试笔试题目

    例如,将Unicode字符转为本地编码的函数`native2Unicode()`,以及从本地编码转回Unicode的类似过程。此外,某些JDBC驱动可以通过设置`jdbc DriverManager`的字符集属性来避免手动转换。 3. **Servlet处理HTML页面中...

    文件上传与下载

    3. 如果是URL传值,确保浏览器发送请求时使用正确的编码,通常可以通过设置页面的`<meta>`标签来实现,如`<meta charset="UTF-8">`。 对于Struts2文件下载,我们可以创建一个Action,通过流的方式读取服务器上的...

    java常见问题.doc

    `HttpServletResponse`的`getOutputStream()`方法返回的`ServletOutputStream`默认使用系统默认编码。为了避免中文乱码,应创建一个`OutputStreamWriter`,指定合适的字符编码(如UTF-8),然后通过`write()`方法...

    Java常见问题集锦.doc

    通过Servlet的`HttpResponse`对象的`getOutputStream()`方法获取`ServletOutputStream`实例,然后设置合适的字符编码,如`ISO-8859-1`或`UTF-8`,以确保HTML页面中的中文字符能够正常显示。 总之,理解并掌握这些...

    使用JSP下载Word和Excel文件

    2. 文件编码:对于非ASCII字符的文件名,需要进行编码处理,以避免乱码问题。 3. 错误处理:添加异常处理机制,当文件不存在或者读取过程中出错时,提供友好的错误提示。 4. 性能优化:大文件下载时,可以考虑分块...

    使用jsp下载excel文件

    - 在设置文件名时,需要注意字符编码问题,避免出现乱码。 - 使用 `new String(fileName.getBytes("GBK"), "ISO8859-1")` 转换文件名以兼容不同的浏览器。 2. **安全问题**: - 对于用户提交的文件名等参数进行...

    jsp+servlet实现文件下载

    javax.servlet.ServletOutputStream out = response.getOutputStream(); String filepath = request.getRealPath("/") + "uploadfile/"; String filename = new String(request.getParameter("filename")....

    Java常见问题集锦

    当使用JDBC处理中文字符时,可能出现乱码问题,这通常与JDBC驱动的实现有关。驱动可能会使用本地编码格式传输字符,因此需要进行字符编码转换。例如,将Unicode转换为本地编码(native code)再插入数据库,反之亦然...

Global site tag (gtag.js) - Google Analytics