servlet中文乱码原因及解决方案.doc_第1页
servlet中文乱码原因及解决方案.doc_第2页
servlet中文乱码原因及解决方案.doc_第3页
servlet中文乱码原因及解决方案.doc_第4页
servlet中文乱码原因及解决方案.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Servlet 中文乱码问题及解决方案剖析 分类: 【Java Web】2012-01-28 23:26654人阅读评论(0)收藏举报一、常识了解1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;3.getBytes() 是通过平台默认字符集进行编码;二、中文乱码出现在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;比如:OutputStream out = response.getOutputStream();out.write(String ); 输出中文时可能会出现乱码;比如:java view plaincopyprint?1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 2.3. OutputStream out = response.getOutputStream(); 4. String data = 博客; 5. out.write(data.getBytes(UTF-8); 6. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException OutputStream out = response.getOutputStream();String data = 博客;out.write(data.getBytes(UTF-8);输出乱码的问题是程序用UTF-8编码,而浏览器用GB2312解码,因此会出现乱码;Servlet乱码分为request乱码和response乱码;三、response中文乱码在网上很有效的解决方法是添加:response.setCharacterEncoding(UTF-8);解决不了,后来又搜到一条解决方法是:respnse.setHeader(content-type,text/html;charset=UTF-8);两句都填上,后来终于解决了这个问题;其实我们应该思考一下本质;问题1:我们这里先来说明一下错误的原因,下图是显示乱码的流程图:response.setContentType(text/html;charset=UTF-8); 目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;response.setCharacterEncoding(UTF-8); 的目的是用于response.getWriter()输出的字符流的乱码问题,如果是response.getOutputStream()是不需要此种解决方案的;因为这句话的意思是为了将response对象中的数据以UTF-8解码后发向浏览器;解决方案流程图:问题2问题代码如下:java view plaincopyprint?1. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 2. PrintWriter out = response.getWriter(); 3. String data = 博客; 4. out.println(data); 5. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException PrintWriter out = response.getWriter();String data = 博客;out.println(data);浏览器输出: ?原因:博客首先被封装在response对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“?”表示没有编码;错误代码流程图:而解决方案是:response.setCharacterEncoding(GB2312); 设置response使用的码表解决方案流程图:补充:通过标签模拟response头; 等价于 response.setC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论