解决jsp中文显示问题
JSP中乱码问题

1.中文乱码问题,首先得需要确定的是,数据库的默认编码要
设置正确,一般设为gb2312.
2.JSP中文乱码问题之一:调用JSP页面显示乱码
通过浏览器调用JSP页面,在客户端浏览器中所有的中文内容出现乱码。
解决方案:
首先确认本JSP在编辑器中保存时,使用的是GB2312(或GBK)的编码格式,然后在JSP页面的开始部分添加
<%@ pageEncoding=”GBK”%>就可以解决中文乱码问题。
3.JSP中文乱码问题之二:调用Servlet页面显示乱码
调用Servlet,Servlet在浏览器中显示内容出现乱码
解决方案:
在Servlet使用response在输出内容之前,先执行response.setContentType(”text/html; chatset=GBK”),设定输出内容编码为GBK,注意的是这句话放在方法的第一行。
4.JSP中文乱码问题之三:post表单传递参数乱码
通过JSP页面、HTML页面或者Servlet中的表单元素提交参数给对应的JSP页面或者Servlet而JSP页面或者Servlet接收的中文参数值乱码
解决方案:
在接收post提交的参数之前,使用request.setCharacterEncoding(“GBK”),设定接收参数的内容使
用GBK编码。
遇到jsp中文显示乱码的解决方案

不用编码就可以插入了
2.显示插入的中文:
因为存入的是latin,所以显示的时候就要GBK一下
String x=new String((rs.getString("title")).getBytes("ISO8859_1"),"GBK");
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。修改后的process.jsp代码如下:
iso = iso.trim();
gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
return gb;
}
}
catch(Exception e)
{
System.err.print("编码转换错误:"+e.getMessage());
綠起:
JSP的request 默认为ISO8859_1,所以在处理中文的时候,要显示中文的话,必须转成GBK的,如下String str=new String(request.getParameter("name").getBytes("ISO8859-1"),"GBK"); out.println(str); 这样就可以显示中文了
如何处理JSP开发容易出现的中文乱码问题

在java编程中,经常会碰到汉字的处理及显示问题,一不小心就会产生一大堆乱码或问号,这也是让许多初学者手足无措的讨厌问题。
造成这种问题的根本原因是java中默认的编码方式是Unicode,而中国人通常使用的文件和DB都是基于GB2312或者big5等编码,固会出现此问题。
对于中文问题,不同的jdk版本,不同的应用服务器,处理方法都会有一些微小的差异。
在这里,主要针对Tomcat中JSP开发容易出现的中文乱码问题进行讨论,当然,大多数解决方法是通用的。
一般有以下几种情况:1、JSP输出中文的乱码问题所谓在JSP输出中文,即直接在JSP中输出中文,或者给变量赋中文值再输出等,这种情况下的乱码问题往往是因为没有给JSP页面制定显示字符的编码方式,解决方法如下:(1)在JSP页面头部加上语句<% @ page contentType=”text/html;charset=utf-8”%>(在servlet 中使用httpServletResponse.setContentType(“text/html; charset=utf-8”)),最好同时在JSP页面的head部分加上<meta http-equiv=”Content-Type”content=”text/html;charset=utf-8”>。
(2)在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方法:<%String str = “中文”;Byte[] tmpbyte = str.getBytes(“ISO8859_1”);str = new String(tmpbyte);out.print(str);2、获取表单提交的数据时的中文乱码问题在没有加任何其他处理之前,用request.getParameter(“paramName”)获取表单提交中的数据,且表单数据中含有中文时,返回的字符串会呈现乱码。
JSP中文乱码问题解决方案

JSP中文乱码问题解决方案中文乱码就是因为编码不符,可能出现乱码有四个地方:1 JSP编码乱码2 HTML编码乱码3 request获取数据乱码4 response输出信息乱码5 Cookie导致的编码问题下面将会对上面几种情况进行介绍:1 JSP乱码这种是最常见的,设置编码的位置位于JSP的第一行,如果在Eclipse中新建一个JSP默认是下面这种:<%@ page language="java"contentType="text/html; charset=ISO-8859-1"pageE ncoding="ISO-8859-1"%>可以看到它默认的页面编码和传输编码都是ISO-8859-1,这是用于欧洲国家的编码。
可以通过设置Eclipse中JSP的编码格式,来修改默认生成的编码格式。
如果想要支持中文,可以使用UTF-8、GB2312、GBK等,其中UTF-8是国际化的,哪个国家的都支持,所以推荐使用这个。
再来说说上面涉及到编码的两个地方:charset 和pageEncodingcharset是指服务器发往客户端展现时的编码;pageEncoding用于设置JSP页面本身的编码。
JSP在部署后提供给用户使用,会经过三个阶段:(1)JSP生成java文件:这个阶段会使用pageEncoding所定义的编码格式进行转换(2)java文件生成class文件:这个阶段由服务器tomcat自动使用utf -8编码把java文件转换成字节码class文件(3)通过读取class文件展现给用户:这个阶段由tomcat服务器获取字节码内容,通过使用contentType所定义的编码格式展现给用户。
大致过程如下图:这样设置好JSP中的第一行代码,就可以保证基本的JSP展现没有乱码了!<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncodi ng="UTF-8"%>2 HTML乱码因为JSP中也包含html的内容,HTML本身也是有编码格式的。
JSP的中文乱码问题

JSP中文乱码问题有如下几个方面:页面乱码、参数乱码、表单乱码、源文件乱码。
下面来逐一解决其中的乱码问题。
一、JSP页面中文乱码在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一种是在JSP中动态输出的中文乱码。
先看一个JSP程序:[java]view plaincopyprint?1.<%@ page language="java"import="java.util.*" %>2.<html>3. <head>4. <title>中文显示示例</title>5.6. </head>7. <body>8.这是一个中文显示示例:9. <%10. String str = "中文";11. out.print(str);12. %>13. </body>14.</html>上面这个JSP程序看起来好像是在页面显示几句中文而且标题也是中文。
运行后在浏览器中显示如图所示原因在于没有在JSP中指定页面显示的编码,消除乱码的解决方案很简单上面代1.<%@ page language="java"import="java.util.*" contentType="text/html;charset=GB2312" %>再次运行乱码消失,原理就是向页面指定编码为GB2312,那么页面就会按照此编码来显示,于是乱码消失。
二、URL传递参数中文乱码一般情况下在使用get方法提交表单的时候传递的参数如果是中文的话很可能会出现乱码。
下面是一个示例程序[java]view plaincopyprint?1.<%@ page language="java"import="java.util.*" contentType="text/html; charset=gb2312"%>2.<html>3. <head>4. <title>URL传递参数中文处理示例</title>5. </head>6. <%7. String param = request.getParameter("param");8. %>9. <body>10. <a href="URLCharset.jsp?param='中文'">请点击这个链接</a><br>11.你提交的参数为:<%=param%>12. </body>13.</html>上面这个JSP程序的功能就是通过一个URL链接向自身传递一个参数,这个参数是中文字符串,这个程序的运行效果如下图对于URL传递中文参数乱码这个问题,其处理方法比较特殊,仅仅转换这个中文字符串或者设置JSP页面显示编码都是不能解决问题的,需要修改Tomcat服务器的配置文件才能解决问题。
jsp页面显示中文乱码解决

jsp页面显示中文乱码:jsp页面的编码方式有两个地方需要设置:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ page contentType="text/html;charset=utf-8"%>其中:pageEncoding 指的是jsp文件本身在本地保存时的编码方式。
contentType的charset 是指服务器发送网页内容给客户端时所使用的编码。
从第一次访问一个jsp页面开始,到这个页面被发送到客户端,这个Jsp页面要经过三次编码转换:第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
JAVAC用UTF-8的encoding读取java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效所以最终的解决方法为:在jsp页面设置pageEncoding或者contentType的其中一个为支持中文的编码格式(如utf-8,gbk,gb2312)。
JSP中文乱码问题—1

今天在部署一个webservices程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题。
到网上找资料,如下:JAVA是Unicode编码,你先转换成ISO8859-1,然后再转换成GBK或是GB2312.java 代码这样就是中文啦!还有一种更简单的方法,就是直接在服务器里设置编码转换。
用的是TOMCAT5.0.28。
在..\Tomcat 5.0\conf目录里找到SERVER.XML文件,用写字板打开它,设置如下:里面增加一个属性就可以了,URIEncoding="GBK"测试通过,搞定,然后就是request.setCharacterEncoding("GB2312")这句话到底起了什么作用,如果它不能解决乱麻问题,我们用它来起什么作用,整理资料如下:(一) JSP页面上是中文,但是看的是后是乱码:解决的办法就是在JSP页面的编码的地方,因为Jsp转成Java文件时的编码问题,默认的话有的服务器是ISO-8859-1,如果一个JSP中直接输入了中文,Jsp把它当作ISO8859-1来处理是肯定有问题的,这一点,我们可以通过查看Jasper所生成的Java中间文件来确认(二) 当用Request对象获取客户提交的汉字代码的时候,会出现乱码:解决的办法是:要配置一个filter,也就是一个Servelet的过滤器,代码如下:public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding("GBK");// 传递控制到下一个过滤器chain.doFilter(request, response);}配置web.xml<filter></filter><filter-name></filter-name>Set Character Encoding<filter-class></filter-class>SetCharacterEncodingFilter<filter-mapping></filter-mapping><filter-name></filter-name>Set Character Encoding<url-pattern></url-pattern>/*如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。
JSP中文乱码问题解决办法

JSP中文乱码问题解决办法当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊处理。
常见的几种字符集编码:⏹ASCII码:不支持中文⏹ISO-8859-1:不支持中文⏹GB2313、GBK:支持中文⏹Unicode:支持中文⏹UTF-8:支持中文在解决JSP中文乱码问题前,弄清以下几点:(1) windows平台采用的默认字符集编码是:GBK(2) IE浏览器默认采用UTF-8字符集编码方式发送Http请求。
(3) Tomcat在处理Get请求时,永远采用ISO-8859-1编码;Tomcat在处理Post请求时,默认采用ISO-8859-1编码;如果进行了如下设置request.setCharacterEncoding(“GBK”),则采用GBK编码。
可以使用如下几种方式解决JSP中文乱码问题。
1、方法一:调用自定义的转换函数<%@page contentType="text/html;charset=GB2312"%><%!public String getStr(String s) {String str = s;try {byte[] b = str.getBytes("ISO-8859-1");str = new String(b);return str;} catch (Exception e) {return str;}}%>使用内置对象request将获取的数据,使用ISO-8859-1进行重新编码,并保存到一个字节数组中,然后调用new String()方法,以GBK方式将这个字节数组构造出一个新的字符串,这个新的字符串就是我们想要的结果。
适用于以下三种情况:(1) 以Get方式提交表单,提交的数据中包含汉字字符。
(2) 以Post方式提交表单,提交的数据中包含汉字字符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解决: jsp页面中文显示问题<%@ page pageEncoding=”gb2312″ %>,决定jsp页面编写时的编码。
<%@ page content_type=”text/html;charset=UTF-8″ %>,决定jsp页面显示在客户端浏览器的编码。
在解决这个问题的同时,我还发现了一篇至今为止我所见过的解决java中文问题最彻底的文章:上篇:/pcedu/empolder/gj/java/0404/ 366404.html下篇:/pcedu/empolder/gj/java/0405/ 368760.html深入Java中文问题及最优解决方法Abstract:本文深入分析了Java程序设计中Java编译器对java源文件和JVM对class类文件的编码/解码过程,通过此过程的解析透视出了Java编程中中文问题产生的根本原因,最后给出了建议的最优化的解决Java中文问题的方法。
1、中文问题的来源计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理。
随着计算机的发展,为了适应世界其它民族的语言(当然包括我们的汉字),人们提出了UNICODE编码,它采用双字节编码,兼容英文字符和其它民族的双字节字符编码,所以,目前,大多数国际性的软件内部均采用UNICODE编码,在软件运行时,它获得本地支持系统(多数时间是操作系统)默认支持的编码格式,然后再将软件内部的UNICODE转化为本地系统默认支持的格式显示出来。
Java的JDK和JVM即是如此,我这里说的JDK是指国际版的JDK,我们大多数程序员使用的是国际化的JDK版本,以下所有的JDK均指国际化的JDK版本。
我们的汉字是双字节编码语言,为了能让计算机处理中文,我们自己制定的gb2312、GBK、GBK2K等标准以适应计算机处理的需求。
所以,大部分的操作系统为了适应我们处理中文的需求,均定制有中文操作系统,它们采用的是GBK,GB2312编码格式以正确显示我们的汉字。
如:中文Win2K默认采用的是GBK编码显示,在中文WIN2k中保存文件时默认采用的保存文件的编码格式也是GBK 的,即,所有在中文WIN2K中保存的文件它的内部编码默认均采用GBK编码,注意:GBK是在GB2312基础上扩充来的。
由于Java语言内部采用UNICODE编码,所以在JAVA程序运行时,就存在着一个从UNICODE编码和对应的操作系统及浏览器支持的编码格式转换输入、输出的问题,这个转换过程有着一系列的步骤,如果其中任何一步出错,则显示出来的汉字就会出是乱码,这就是我们常见的JAVA中文问题。
同时,Java是一个跨平台的编程语言,也即我们编写的程序不仅能在中文windows上运行,也能在中文Linux等系统上运行,同时也要求能在英文等系统上运行(我们经常看到有人把在中文win2k上编写的JAVA程序,移植到英文Linux上运行)。
这种移植操作也会带来中文问题。
还有,有人使用英文的操作系统和英文的IE等浏览器,来运行带中文字符的程序和浏览中文网页,它们本身就不支持中文,也会带来中文问题。
几乎所有的浏览器默认在传递参数时都是以UTF-8编码格式来传递,而不是按中文编码传递,所以,传递中文参数时也会有问题,从而带来乱码现象。
总之,以上几个方面是JAVA中的中文问题的主要来源,我们把以上原因造成的程序不能正确运行而产生的问题称作:JAVA中文问题。
2、JAVA编码转换的详细过程我们常见的JAVA程序包括以下类别:*直接在console上运行的类(包括可视化界面的类)*JSP代码类(注:JSP是Servlets类的变型)*Servelets类*EJB类*其它不可以直接运行的支持类这些类文件中,都有可能含有中文字符串,并且我们常用前三类JAVA程序和用户直接交互,用于输出和输入字符,如:我们在JSP和Servlet中得到客户端送来的字符,这些字符也包括中文字符。
无论这些JAVA类的作用如何,这些JAVA程序的生命周期都是这样的:*编程人员在一定的操作系统上选择一个合适的编辑软件来实现源程序代码并以.java扩展名保存在操作系统中,例如我们在中文win2k中用记事本编辑一个java源程序;*编程人员用JDK中的javac.exe来编译这些源代码,形成.class类(JSP文件是由容器调用JDK来编译的);*直接运行这些类或将这些类布署到WEB容器中去运行,并输出结果。
那么,在这些过程中,JDK和JVM是如何将这些文件如何编码和解码并运行的呢?这里,我们以中文win2k操作系统为例说明JAVA类是如何来编码和被解码的。
第一步,我们在中文win2k中用编辑软件如记事本编写一个Java源程序文件(包括以上五类JAVA程序),程序文件在保存时默认采用了操作系统默认支持GBK编码格式(操作系统默认支持的格式为file.encoding格式)形成了一个.java文件,也即,java程序在被编译前,我们的JAVA源程序文件是采用操作系统默认支持的file.encoding编码格式保存的,java源程序中含有中文信息字符和英文程序代码;要查看系统的file.encoding参数,可以用以下代码:public class ShowSystemDefaultEncoding {public static void main(String[] args) {String encoding =System.getProperty("file.encoding");System.out.println(encoding);}}第二步,我们用JDK的javac.exe文件编译我们的Java 源程序,由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定我们的JAVA源程序的编码格式,则javac.exe首先获得我们操作系统默认采用的编码格式,也即在编译java程序时,若我们不指定源程序文件的编码格式,JDK 首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如WIN2k,它的值为GBK),然后JDK就把我们的java源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放入内存中。
然后,javac把转换后的unicode 格式的文件进行编译成.class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE 编码的编译后的class文件保存到我们的操作系统中形成我们见到的.class文件。
对我们来说,我们最终获得的.class文件是内容以UNICODE编码格式保存的类文件,它内部包含我们源程序中的中文字符串,只不过此时它己经由file.encoding格式转化为UNICODE格式了。
这一步中,对于JSP源程序文件是不同的,对于JSP,这个过程是这样的:即WEB容器调用JSP编译器,JSP编译器先查看JSP文件中是否设置有文件编码格式,如果JSP文件中没有设置JSP文件的编码格式,则JSP编译器调用JDK先把JSP文件用JVM默认的字符编码格式(也即WEB容器所在的操作系统的默认的file.encoding)转化为临时的Servlet类,然后再把它编译成UNICODE格式的class类,并保存在临时文件夹中。
如:在中文win2k上,WEB容器就把JSP文件从GBK编码格式转化为UNICODE格式,然后编译成临时保存的Servlet类,以响应用户的请求。
第三步,运行第二步编译出来的类,分为三种情况:A、直接在console上运行的类B、 EJB类和不可以直接运行的支持类(如JavaBean类)C、 JSP代码和Servlet类D、 JAVA程序和数据库之间下面我们分这四种情况来看。
A、直接在console上运行的类这种情况,运行该类首先需要JVM支持,即操作系统中必须安装有JRE。
运行过程是这样的:首先java启动JVM,此时JVM读出操作系统中保存的class文件并把内容读入内存中,此时内存中为UNICODE格式的class类,然后JVM运行它,如果此时此类需要接收用户输入,则类会默认用file.encoding编码格式对用户输入的串进行编码并转化为unicode保存入内存(用户可以设置输入流的编码格式)。
程序运行后,产生的字符串(UNICODE编码的)再回交给JVM,最后JRE把此字符串再转化为file.encoding格式(用户可以设置输出流的编码格式)传递给操作系统显示接口并输出到界面上。
对于这种直接在console上运行的类,它的转化过程可用图1更加明确的表示出来:图1以上每一步的转化都需要正确的编码格式转化,才能最终不出现乱码现象。
B、EJB类和不可以直接运行的支持类(如JavaBean类)由于EJB类和不可以直接运行的支持类,它们一般不与用户直接交互输入和输出,它们常常与其它的类进行交互输入和输出,所以它们在第二步被编译后,就形成了内容是UNICODE编码的类保存在操作系统中了,以后只要它与其它的类之间的交互在参数传递过程中没有丢失,则它就会正确的运行。
这种EJB类和不可以直接运行的支持类, 它的转化过程可用图2更加明确的表示出来:图2C、JSP代码和Servlet类经过第二步后,JSP文件也被转化为Servlets类文件,只不过它不像标准的Servlets一校存在于classes目录中,它存在于WEB容器的临时目录中,故这一步中我们也把它做为Servlets 来看。
对于Servlets,客户端请求它时,WEB容器调用它的JVM来运行Servlet,首先,JVM把Servlet的class类从系统中读出并装入内存中,内存中是以UNICODE编码的Servlet类的代码,然后JVM在内存中运行该Servlet类,如果Servlet在运行的过程中,需要接受从客户端传来的字符如:表单输入的值和URL中传入的值,此时如果程序中没有设定接受参数时采用的编码格式,则WEB容器会默认采用ISO-8859-1编码格式来接受传入的值并在JVM中转化为UNICODE格式的保存在WEB容器的内存中。
Servlet运行后生成输出,输出的字符串是UNICODE格式的,紧接着,容器将Servlet运行产生的UNICODE格式的串(如html语法,用户输出的串等)直接发送到客户端浏览器上并输出给用户,如果此时指定了发送时输出的编码格式,则按指定的编码格式输出到浏览器上,如果没有指定,则默认按ISO-8859-1编码发送到客户的浏览器上。