当前位置:  编程技术>java/j2ee

java中Servlet处理乱码的方法

    来源: 互联网  发布时间:2014-10-23

    本文导语:  今天在部署一个webservices程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题。 到网上找资料,如下:JAVA是Unicode编码,你...

今天在部署一个webservices程序的时候,从页面获取数据的servlet出现了乱码问题,在servlet中我已经把request.setCharacterEncoding("GB2312");这段文字加入到代码中去,但是还是出现乱麻问题。
 到网上找资料,如下:JAVA是Unicode编码,你先转换成ISO8859-1,然后再转换成GBK或是GB2312.

java 代码

代码如下:

request.setCharacterEncoding("ISO8859-1");   
ad=request.getParameter("name");   
byte[] temp3 = ad.getBytes("GBK");   
String str = new String(temp3);  

这样就是中文啦!
还有一种更简单的方法,就是直接在服务器里设置编码转换。用的是TOMCAT5.0.28。
在..Tomcat   5.0conf目录里找到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
代码如下:


Set Character Encoding
SetCharacterEncodingFilter


Set Character Encoding
/*


如果你的还是出现这种情况的话你就往下看看是不是你出现了第四中情况,你的Form提交的数据是不是用get提交的,一般来说用post提交的话是没有问题的,如果是的话,你就看看第四中解决的办法。

还有就是对含有汉字字符的信息进行处理,处理的代码是:
代码如下:

public String toUni(String gbStr){
String uniStr = "";
if(gbStr == null){
gbStr = "";
}
try{
byte[] tempByte = gbStr.getBytes("GB2312");
uniStr = new String(tempByte,"ISO8859_1");
}catch(Exception ex){
}
return uniStr;
}
}

你也可以在直接的转换,首先你将获取的字符串用ISO-8859-1进行编码,然后将这个编码存放到一个字节数组中,然后将这个数组转化成字符串对象就可以了,例如:
String str=request.getParameter(“girl”);
Byte B[]=str.getBytes(“ISO-8859-1”);
Str=new String(B);
通过上述转换的话,提交的任何信息都能正确的显示。
(三) 在 Formget请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat的做法设置Filter也没有用或者用 request.setCharacterEncoding("GBK");也不管用问题是出在处理参数传递的方法上:如果在servlet中用 doGet(HttpServletRequest request, HttpServletResponse response)方法进行处理的话前面即使是写了:
代码如下:

request.setCharacterEncoding("GBK");
response.setContentType("text/html;charset=GBK");

也是不起作用的,返回的中文还是乱码!!!如果把这个函数改成doPost(HttpServletRequest request, HttpServletResponse response)一切就OK了。
同样,在用两个JSP页面处理表单输入之所以能显示中文是因为用的是post方法传递的,改成get方法依旧不行。
由此可见在servlet中用doGet()方法或是在JSP中用get方法进行处理要注意。这毕竟涉及到要通过浏览器传递参数信息,很有可能引起常用字符集的冲突或是不匹配。
//这个地方理解为request.setCharacterEncoding("GBK");set的是request中的body,而不是header部分,get请求时把参数放在url后边,不是放在body中,所以这个时候request.setCharacterEncoding("GBK")就没有起到作用,换到post提交就没有问题了,经测试通过,!!

解决的办法是:
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:

代码如下:



2)重启tomcat,一切OK。
tomact.org给的解释
This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. 也就是说转换了URI的bytes,request.setCharacterEncoding("GBK")把request也转换了,问题就ok了!

(四) JSP页面上有中文,按钮上面也有中文,但是通过服务器查看页面的时候出现乱码:
解决的办法是:首先在JSP文件中不应该直接包含本地化的消息文本,而是应该通过标签从Resource Bundle中获得文本。应该把你的中文文本放到Application.properties文件中,这个文件放在WEB-INF/classes/* 下,例如我在页面里有姓名,年龄两个label,我首先就是要建一个Application.properties,里面的内容应该是name=”姓名” age=”年龄”,然后我把这个文件放到WEB-INF/classes/properties/下,接下来根据 Application.properties文件,对他进行编码转化,创建一个中文资源文件,假定名字是 Application_cn.properties。在JDK中提供了native2ascii命令,他能够实现字符编码的转换。在DOS环境中找到你放置Application.properties的这个文件的目录,在DOS环境中执行一下命令,将生成按GBK编码的中文资源文件 Application_cn.properties:native2ascii ?encoding gbk Application.properties Application_cn.properties执行以上命令以后将生成如下内容的Application_cn.properties文件: name=u59d3u540d age=u5e74u9f84,在Struts-config.xml中配置:。到这一步,基本上完成了一大半,接着你就要在JSP页面上写,到名字的那个label是要写,这样的化在页面上出现的时候就会出现中文的姓名,年龄这个也是一样,按钮上汉字的处理也是同样的。
(五) 写入到数据库是乱码:
解决的方法:要配置一个filter,也就是一个Servelet的过滤器,代码如同第二种时候一样。
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK,这样保证到数据库中的代码是不是乱码。
如果你是通过数据源链接的化你不能按照这样的写法了,首先你就要写在配置文件中,在tomcat 5.0.19中配置数据源的地方是在C:Tomcat 5.0confCatalinalocalhost这个下面,我建立的工程是workshop,放置的目录是webapp下面,workshop.xml 的配置文件如下:

代码如下:

reloadable="true" >

auth="Container"
type="javax.sql.DataSource" />



factory
org.apache.commons.dbcp.BasicDataSourceFactory


maxActive
100


maxIdle
30


maxWait
10000


username
root


password


driverClassName
com.mysql.jdbc.Driver


url

粗体的地方要特别的注意,和JDBC直接链接的时候是有区别的,如果你是配置正确的化,当你输入中文的时候到数据库中就是中文了,有一点要注意的是你在显示数据的页面也是要用这行代码的。需要注意的是有的前台的人员在写代码的是后用Dreamver写的,写了一个Form的时候把他改成了一个jsp,这样有一个地方要注意了,那就是在Dreamver中Action的提交方式是request的,你需要把他该过来,因为在jsp的提交的过程中紧紧就是POST和 GET两种方式,但是这两种方式提交的代码在编码方面还是有很大不同的,这个在后面的地方进行说明。< /bean:message>


    
 
 

您可能感兴趣的文章:

  • linux环境下,java程序手工运行不乱码,crontab自动运行就乱码
  • java生成csv文件乱码的解决方法示例 java导出csv乱码
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java汉字显示乱码问题??
  • linux下java程序中的乱码问题
  • java中怎样解决汉字乱码问题?
  • java应用程序的中文乱码问题。
  • java DocConverter.jar转换word文档到pdf 中文乱码问题
  • java自动根据文件内容的编码来读取避免乱码
  • 用java读中文linux中的文件是正确的,用java读英文linux版本中的文件是乱码,如何使英文linux读出的文件数据也是中文的?
  • java通过stock与mysql通信时出现乱码的问题
  • java URL乱码的解决办法
  • linux下的java程序,到windows下看注释部分是乱码???
  • linux下的java程序,到windows下看注释部分是乱码??? iis7站长之家
  • java中使用URL类,读取服务器上的文件返回的中文为什么是乱码?
  • java压缩zip文件中文乱码问题解决方法
  • 请教:linux里取出mysql的数据为乱码,作了编码处理还是不行(java)
  • 关于数据显示 中文 乱码的害我许久的疑难杂症,各位JAVA高手近来看看!!
  • [关于乱码] windows下JAVA项目 在linux系统下运行
  • 请问java程序的中文乱码问题怎么解决?
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_context定义参考
  • JCreator里为什么找不到java.servlet.* java.servlet.http.* 类 ,求助!
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_response定义参考
  • 请问用javac编译一般*.java能通过,但不能编译Servlet写的*.java.提示javax.servlet.http不存在。
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_request定义参考
  • 关于servlet 的编译问题,怎样设置classpth,把那些java servlet类包含到classpath?而且无法调用servlet!谢谢!
  • java Servlet获取和设置cookie实例代码
  • 在java控制台程序中,可以用System.exit(0);使用一个程序终止,那么在servlet中如何使一个servlet程序终止呢?
  • java Servlet实现Session创建存取以及url重写代码示例
  • 很菜鸟的问题: 请看我的servlet的helloworld.java程序编译时为什么出现这些错误??我用的是jdk,环境变量里面已经设置了servlet包。
  • 我在jbuilder中新建一个servlet,源程序为java文件,是怎么从java到servler转换的?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 我想编一个把javac和java连起来用的批处理文件,请批处理文件中的参数怎么表示?
  • Java脚本处理器 jxp
  • Java图像处理框架 Marvin
  • Java图像处理库 jrawio
  • java进行error捕获和处理示例(java异常捕获)
  • Java五线谱处理类库 abc4j
  • Java多媒体处理工具包 Jffmpeg
  • Java的图像处理和分析库 ImageJ
  • java处理word,pdf文档
  • Java图像处理类库 JJIL
  • **java适合做数据处理吗?**
  • java的事件处理机制如何运用?
  • Java文本处理工具包 ORO
  • Java命令行参数处理类库 Commons CLI
  • 简洁实用的Java Base64编码加密异常处理类代码
  • 大家来谈谈JAVA中的异常处理!
  • java中消息处理的机制?
  • Java的GML处理包 GML4J
  • Java 的图像处理库 Imagero
  • Java自然语言处理 LingPipe
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3