对于乱码问题,最根本的是需要确切知道是在那一步操作(client-->servlet/jsp(other components)-->db-->(other components)servlet/jsp-->client)的时候乱的。 下面是我们一位工程师对常见中文问题的总结,供参考:
情况一:JSP 文件中的中文提示信息不能正确显示
解决方法:在JSP 文件中加入
<%@ page contentType=“text/html; charset=GBK“ %> 可以解决这个问题
情况二:JSP文件中包含中文提示信息时,不能正确编译
解决方法:在weblogic.xml文件的<jsp-descriptor>部分加入
<jsp-descriptor>
<jsp-param>
<param-name>compilerSupportsEncoding</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
</jsp-descriptor>
可解决这个问题。
情况三:从数据库中检索出来的中文显示不正确时,在这种情况下,如果数据库使用的是中文字符集,并使用的是Type 2 Jdbc Driver时,对于Weblogic 而言,当使用其提供的oci driver时,可加入Weblogic.codeset=GBK的属性可解决这个问题
情况四:在JSP文件之间传递中文时,如果不能正确传递中文数据,可在web.xml文件中加入
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GBK</param-value>
</context-param>
可解决这个问题。
情况五:为使浏览器能正确显示中文,应在 HTML <HEAD> 部分增加:
<meta http-equiv="Content-Type" content="text/html" charset="gbk">
情况一,只是提示浏览器使用什么编码解析html,不是根本的乱码问题,也就是客户端可以直接习惯浏览器编码方式
情况二和情况四,在我碰到乱码时从没有生效过
情况三也不够全面
我几次做项目加上每次劳烦BEA工程师大驾,一起总结出的经验主要是,从客户端语言地区设置-weblogic所在操作系统语言地区设置-java编译选项-数据库语言地区设置,这些设置要完全一致,你才能正确看到中文。
客户端语言地区设置:客户端主要使用windows平台,一般应该没有问题。我只在别人的案例里看见过有修改客户端语言地区设置,如果你实在穷途末路,再考虑这个。
weblogic所在操作系统语言地区设置:如果是中文windows,应该也没有什么问题。如果是unix/linux,那么要在启动weblogic的用户的profile里加上LANG=zh,具体的语言,要看你的操作系统而定。注意你如果是su切换用户,一定要su - xxx,不然也会乱码。
java编译选项:这个我一般都会加上,在我的系统里使用ant,我会在build.xml里加上encoding,一般指示javac -encoding GB2312。
数据库语言环境设置:这个我不是特别熟悉,一般你用pl/sql能正确往数据库插入中文记录,那么你就别期望指责数据库了。 最后给一个救命绝招,request.setCharaterEncoding("GB2312")。在你实在没辙的时候,试试这个。但是这个使用起来要谨慎,它如果执行1次以上,也会出现乱码。而且不一定适应所有平台环境,想想你的系统写好了一堆jsp,结果跑到客户那里安装不正确,难道你要修改所有的页面吗?
在 platform7.0上我还有一个中文问题始终还是没解决,那就是获取浏览器提交(POST方式和GET方式)的数据,始终不正确,不论直接输出到JSP页面,还是插入数据库后从数据库里来查看。我已经在 Web app Descriptor里的JSP Descriptor里设置了Encoding=gb2312,其结果是在weblogic.xml里加了一段
<jsp-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</jsp-param>
但是还是不起作用。(用request.setCharacterEncoding是可以,但是我始终觉得不应该用程序来管这事) 另外两个地方的问题,一是JSP显示中文,只需要设置ContentType就可以,二是数据库中文问题在连接池属性里加一个 weblogic.codeset=gb2312就可以了。
刚刚终于弄明白“Resource Path”的意思,FORM提交中文的问题可以解决了,设置“Web application deployment descriptor”,增加一个Charset Params,Input Charset Descriptor,
Resource Path = "/*"
Java Charset Name="gb2312"
之后别忘了Persist。 操作的结果是在 weblogic.xml里增加了一段: <charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>gb2312</java-charset-name>
</input-charset>
</charset-params> 因此也可以直接修改 weblogic.xml。但推荐还是使用Console来改。
当你的weblogic运行环境是西文时,一下一定要做:
编译代码时加上encoding GBK选项
指定JSP编译时的encoding选项,也就是“情况二”所提及的
使用JSP的page命令来指定content-type。不过大部分情况下不是一定要做,因为WLS能从JSp编译的encoding那边获取应该使用的编码类型
情况一:JSP 文件中的中文提示信息不能正确显示
解决方法:在JSP 文件中加入
<%@ page contentType=“text/html; charset=GBK“ %> 可以解决这个问题
情况二:JSP文件中包含中文提示信息时,不能正确编译
解决方法:在weblogic.xml文件的<jsp-descriptor>部分加入
<jsp-descriptor>
<jsp-param>
<param-name>compilerSupportsEncoding</param-name>
<param-value>true</param-value>
</jsp-param>
<jsp-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</jsp-param>
</jsp-descriptor>
可解决这个问题。
情况三:从数据库中检索出来的中文显示不正确时,在这种情况下,如果数据库使用的是中文字符集,并使用的是Type 2 Jdbc Driver时,对于Weblogic 而言,当使用其提供的oci driver时,可加入Weblogic.codeset=GBK的属性可解决这个问题
情况四:在JSP文件之间传递中文时,如果不能正确传递中文数据,可在web.xml文件中加入
<context-param>
<param-name>weblogic.httpd.inputCharset./*</param-name>
<param-value>GBK</param-value>
</context-param>
可解决这个问题。
情况五:为使浏览器能正确显示中文,应在 HTML <HEAD> 部分增加:
<meta http-equiv="Content-Type" content="text/html" charset="gbk">
情况一,只是提示浏览器使用什么编码解析html,不是根本的乱码问题,也就是客户端可以直接习惯浏览器编码方式
情况二和情况四,在我碰到乱码时从没有生效过
情况三也不够全面
我几次做项目加上每次劳烦BEA工程师大驾,一起总结出的经验主要是,从客户端语言地区设置-weblogic所在操作系统语言地区设置-java编译选项-数据库语言地区设置,这些设置要完全一致,你才能正确看到中文。
客户端语言地区设置:客户端主要使用windows平台,一般应该没有问题。我只在别人的案例里看见过有修改客户端语言地区设置,如果你实在穷途末路,再考虑这个。
weblogic所在操作系统语言地区设置:如果是中文windows,应该也没有什么问题。如果是unix/linux,那么要在启动weblogic的用户的profile里加上LANG=zh,具体的语言,要看你的操作系统而定。注意你如果是su切换用户,一定要su - xxx,不然也会乱码。
java编译选项:这个我一般都会加上,在我的系统里使用ant,我会在build.xml里加上encoding,一般指示javac -encoding GB2312。
数据库语言环境设置:这个我不是特别熟悉,一般你用pl/sql能正确往数据库插入中文记录,那么你就别期望指责数据库了。 最后给一个救命绝招,request.setCharaterEncoding("GB2312")。在你实在没辙的时候,试试这个。但是这个使用起来要谨慎,它如果执行1次以上,也会出现乱码。而且不一定适应所有平台环境,想想你的系统写好了一堆jsp,结果跑到客户那里安装不正确,难道你要修改所有的页面吗?
在 platform7.0上我还有一个中文问题始终还是没解决,那就是获取浏览器提交(POST方式和GET方式)的数据,始终不正确,不论直接输出到JSP页面,还是插入数据库后从数据库里来查看。我已经在 Web app Descriptor里的JSP Descriptor里设置了Encoding=gb2312,其结果是在weblogic.xml里加了一段
<jsp-param>
<param-name>encoding</param-name>
<param-value>gb2312</param-value>
</jsp-param>
但是还是不起作用。(用request.setCharacterEncoding是可以,但是我始终觉得不应该用程序来管这事) 另外两个地方的问题,一是JSP显示中文,只需要设置ContentType就可以,二是数据库中文问题在连接池属性里加一个 weblogic.codeset=gb2312就可以了。
刚刚终于弄明白“Resource Path”的意思,FORM提交中文的问题可以解决了,设置“Web application deployment descriptor”,增加一个Charset Params,Input Charset Descriptor,
Resource Path = "/*"
Java Charset Name="gb2312"
之后别忘了Persist。 操作的结果是在 weblogic.xml里增加了一段: <charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>gb2312</java-charset-name>
</input-charset>
</charset-params> 因此也可以直接修改 weblogic.xml。但推荐还是使用Console来改。
当你的weblogic运行环境是西文时,一下一定要做:
编译代码时加上encoding GBK选项
指定JSP编译时的encoding选项,也就是“情况二”所提及的
使用JSP的page命令来指定content-type。不过大部分情况下不是一定要做,因为WLS能从JSp编译的encoding那边获取应该使用的编码类型
解决方案 »
- 【菜鸟提问】request.getContextPath() 问题
- 通过xsd 生成java文件。会的 不会的都进来瞧瞧
- 弱弱问一个问题,关于Servlet的。谢谢。
- JSP什么水平才能找到工作啊
- Hibernate Annotation如何映射视图
- jsp调Servlet 出现错误
- 我是jsp初学者,我想实现一个页面请多帮忙!!
- 帮忙看看这段jsp代码。(比较穷,所以分不是很高,大家包涵)
- 谢谢了,用Socket socket = new Socket(InetAddress.getLocalHost(), 8878);与服务器建立了连接,怎么才能知道连接是不是成功?
- JSP又一个中文问题
- 请问javamail类库能否实现读取微软OE邮件文件eml格式得功能?
- servlet 部署问题!!!
在JSP页面全部用“utf-8”,我想实现i18n,
想请教你在这方面的经验谢谢。