`

java,servlet中文乱码问题解决二

 
阅读更多

一、常识了解

 

1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;

2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码;

3.getBytes() 是通过平台默认字符集进行编码;

 

二、中文乱码出现

 

在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;

比如:

OutputStream out = response.getOutputStream();

out.write(String );

输出中文时可能会出现乱码;

比如:

[java] view plain copy
  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.     }  


输出乱码的问题是程序用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 plain copy
  1. protected   void  doGet(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {  
  2.         PrintWriter out = response.getWriter();  
  3.         String data = "博客" ;  
  4.         out.println(data);    
  5.     }  


浏览器输出: ??

原因 :"博客"首先被封装在response对象中,因为IE和WEB服务器之间不能传输文本,然后就通过ISO-8859-1进行编码,但是ISO-8859-1中没有“博客”的编码,因此输出“??”表示没有编码;

 

错误代码流程图:

 

 

而解决方案是:response.setCharacterEncoding("GB2312"); 设置response使用的码表

 

解决方案流程图:

 

 

补充:通过<meta>标签模拟response头;

<meta http-equiv="content-type" content="text/html"/> 等价于 response.setContentType("text/html");

 

四、request乱码问题

 

request请求分为post和get,对于不同的请求方式有不同的解决乱码的方案;

 

1.post请求乱码

 

错误原因:

 

解决方案:

 

2.get请求乱码

 

分享到:
评论

相关推荐

    Java Web开发(JSP、Servlet)乱码终极解决方案.txt

    F:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发(JSP、Servlet)乱码终极解决方案.txtF:\文档\PDF格式学习资料\主题:Java Web开发...

    Servlet 中文乱码解决工具类

    在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象。由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用的业务处理中也会使用ISO-...

    Servlet 中文乱码问题

    1 GBK包含GB2312 即如果通过GB2312编码后可以通过GBK解码 反之可能不成立; 2 java nio charset Charset defaultCharset 获得平台默认字符编码; 3 getBytes 是通过平台默认字符集进行编码;

    java乱码问题解决方法

    utf8解决JSP中文乱码问题 Tomcat 5.5中文乱码 JDBC ODBC Bridge的Bug及其解决方法 Solaris下Servlet编程的中文问题及解决办法

    Java Servlet输出中文乱码问题解决方案

    主要介绍了Java Servlet输出中文乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    servlet中解决乱码

    关于java中使用servlet中解决乱码!

    jsp,java中文乱码问题另类解决方案,jni加密、解密编码

    将任意字符(包括汉字)加密并编码成数字+数字,解密时先解码后解密还原成相应字符。  例如:  原文:测试 helloworld ... 3,可用于解决jsp,servlet的中文乱码问题。  数据加密后传出去,在调用的地方解密即可。

    servlet输出中文乱码问题

    java输出中文乱码问题^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    ajax到servlet乱码解决

    用ajax 通过url传参数给servlet时,在servlet提取时一直是乱码,即使用了统一的字符编码也没用。

    Java Web开发中文乱码问题的研究与解决.pdf

    在利用Servlet/JSP技术开发java Web应用程序的时候,不可避免的会遇到中文乱码问题,本文首先介绍了Web应用中常用的编码方式,然后分析了J2EE平台下Web应用中文乱码问题产生的原因,并在此基础上针对不同情况提出了解决...

    java中的乱码问题

    java中设计的乱码问题解决方案,包括数据库端,页面端,servlet端的乱码解决方法。

    java,jsp,servlet 乱码

    乱码总结,其中包括java,servlet,jsp,struts2,等,属个人总结,仅提供参考

    java中文乱码解决方案

    这边有必有说明的是如果是jsp+java bean+servlet的方案,中文乱码很好解决,统一设成gb2312就可以了。 1.2 使用struts框架字符集不能设成gb2312,要改成utf-8。  2. 在struts.properties 添加: struts.devMode=...

    处理Java的ssh集成中的中文乱码问题

    简单,易懂,利用过滤器和请求处理器来解决项目中的中文乱码问题

    做Java项目过程中遇到乱码问题的解决方案

    在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...

    java通过servlet获取验证码和文件下载

    本代码主要是为了解决通过servlet向前台传送验证码并进行校验。...同时避免中文乱码问题。如果下载后有文件无法启动的问题,请将代码移植到自己的程序中,本代码使用eclipse开发。是一个dynamic web project项目。

    解决html,servlet,sql,java console中文问题

    1、在HTML页面:(gb2312是gbk的子集) 2、在Java Console应用程序中: 3、对Servlet: 4、对JSP: 5、对数据库:

    apache-tomcat-8.0.33中文自动解决GBK乱码问题

    而该工具可以自动解决UTF-8和GBK乱码的问题。 使用教程: 直接替换原先项目的Tomcat,将JavaWeb项目(Servlet、SSH、SSM框架的项目)直接部署到该Tomcat8中即可,无需做其他的额外的操作。 运行教程: 可以通过...

    Java Web应用开发:servlet.ppt

    如何向客户端发送响应 知道如何解决web开发中的中文乱码问题,知道乱码问题产生的原因和解决方法 会debug服务端代码 什么是Servlet Servlet是Java web应用中最核心的组件,完全用Java语言编写,它运行于服务端,它...

    jsp传参 servlet接收中文乱码问题的解决方法

    毕竟数据是根本嘛,首先我用的是hibernate+servlet,但是在jsp页面传参到servlet的时候中文一直乱码,我尝试了好多方法,最后还是解决了。 第一,首先看清项目的编码,jsp页面的编码 第二,修改tomcat 下面的server....

Global site tag (gtag.js) - Google Analytics