jsp乱码问题解决_第1页
jsp乱码问题解决_第2页
jsp乱码问题解决_第3页
jsp乱码问题解决_第4页
全文预览已结束

下载本文档

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

文档简介

1、、Java中文问题的由来Java的内核和class文件是基于uni code的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和 Java程序于其他媒介交互产生的乱码问题。首先Java (包括JSP)源文件中很可能包含有中文,而 Java和JSP源文件 的保存方式是基于字节流的,如果 Java和JSP编译成class文件过程中,使用 的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的 话,尽量手动带参数ecoding

2、 GBK或ecoding gb2312编译;对于JSP,在文 件头加上 或v% page con te ntType=text/html;charset=gb2312%基本上就能解决这类乱码问题。本文要重点讨论的是第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的, Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具 体情况如下:从页面form提交数据到java程序byte char从java程序到页面显示char byte从数据库到java程序byte char从java程序到数据库char

3、 byte从文件到java程序byte char从java程序到文件char byte从流到java 程序 byte char从java 程序到流 char byte如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。、解决方法前面已经提到了 Java程序与其他媒介交互时字符和字节的转换过程,如果 这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的 编码方式与字节原有的编码方式保持一致,下面分别论述(Java或JSP自身产生的乱码请参看第一部分)。1、JSP与页面参数之间的乱码JSP获取页面参数时一般米用系统默认的编码方式,如果页面参数的编码类 型

4、和系统默认的编码类型不一致, 很可能就会出现乱码。 解决这类乱码问题的基 本方法是在页面获取参数之前,强制指定 request 获取参数的编码方式: request.setCharacterEncoding(GBK) 或 request.setCharacterEncoding(gb2312) 。如果在JSP将变量输出到页面时出现了乱码,可以通过设置 response.setContentType(text/html;charset=GBK) 或 response.setContentType(text/html;charset=gb2312) 解决。如果不想在每个文件里都写这样两句话, 更简

5、洁的办法是使用 Servlet 规范 中的过虑器指定编码,过滤器的在 web.xml 中的典型配置和主要代码如下:web.xml:CharacterEncodingFilter net.vschool.web.CharacterEncodingFilterencodingGBKCharacterEncodingFilter/*CharacterEncodingFilter.java:public class CharacterEncodingFilter implements Filterprotected String encoding = null;public void init(Fil

6、terConfig filterConfig) throws ServletExceptionthis.encoding = filterConfig.getInitParameter(encoding);public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletExceptionrequest.setCharacterEncoding(encoding);response.setContentType(text/htm

7、l;charset=+encoding);chain.doFilter(request, response);2、Java 与数据库之间的乱码大部分数据库都支持以 unicode 编码方式,所以解决 Java 与数据库之间的 乱码问题比较明智的方式是直接使用 unicode 编码与数据库交互。 很多数据库驱 动自动支持 unicode ,如 Microsoft 的 SQLServer 驱动。其他大部分数据库驱动, 可以在驱动的url参数中指定,如如 mmt勺mysql驱动: jdbc:mysql:/localhost/WEBCLDB?useUnicode=true&characterEncod

8、ing=GBK 。3、Java 与文件/ 流之间的乱码Java 读写文件最常用的类是 FileInputStream/FileOutputStream 和 FileReader/FileWriter 。其中 FileInputStream 和 FileOutputStream 是基于字 节流的,常用于读写二进制文件。 读写字符文件建议使用基于字符的 FileReader 和 FileWriter ,省去了字节与字符之间的转换。但这两个类的构造函数默认使 用系统的编码方式, 如果文件内容与系统编码方式不一致, 可能会出现乱码。 在 这种情况下,建议使用 FileReader 和 FileWrit

9、er 的父类: InputStreamReader/OutputStreamWriter ,它们也是基于字符的, 但在构造函数 中可以指定编码类型: InputStreamReader(InputStream in, Charset cs)和OutputStreamWriter(OutputStream out, Charset cs) 。4、其他上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码, 可能需要手动修改代码。解决 Java乱码问题的关键在于在字节与字符的转换过 程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须 与这个编码方式保持一致。我们以前使

10、用Res in服务器,使用smartupload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在Linux中把Resin设置成服务后,上传文件同时的中文参数获取出现了乱码。这个问题困扰 了我们很久,后来我们分析smartupload组件的源文件,因为文件上传采用的是 字节流的方式,里面包含的参数名称和值也是字节流的方式传递的。smartupload 组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在 smartupload将字节流转换成字符串时采用了系统默认的编码,而将Resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改 了 smartupload 的源文件,增加了一个属性 charset 和 setCharset(String)方法,将upload()方法中提取参数语句:String value = new Stri ng(m_bi nArray, m_s

温馨提示

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

评论

0/150

提交评论