解决jspSmartUpload组件上传下载文件时中文乱码问.
- 格式:doc
- 大小:21.50 KB
- 文档页数:7
彻底解决中文名文件下载和下载文件内容乱码问题之前,写过一个Download.jsp文件,可以解决下载文件乱码问题(诸如:DOC,XSL文件等等).后来发现,遇到中文名的文件的时候,文件下载将会报错~~~~今天,通过改写原Download.jsp文件已经彻底解决了这个问题~ 现在,把一整套的文件上传下载的方法给贴出来~~~以便大家借鉴!~!~!~!~!作者:古埃及法老-------------------------------------------------------------------------------------------------------------------测试环境:WEBLOGIC 8.1,WIN XP SP4,IE 6.0-----------------------------------------------------文件上传:-----------------------------------------准备工作:导入著名的SmartUpload.jar组件包upload.jsp文件------------------------------------------------------------------------------------------------------------------ upload_ok.jsp文件------------------------------------------------------------------------------------------------------------------文件下载:-----------------------------------------文件的超连接写法范例:<% String fname ="中文测试.xsl"; //假设你的文件名是:中文测试.xsl%><A target="_blank" href="Download.jsp?filename=<%=fname%>">下载</A> 文件的超连接写法范例-2 重新用utf-8对文件名编码:<%@ page contentType="text/html;charset=gb2312" session="true"%><% String name=.URLEncoder.encode("世界文化.doc","UTF-8"));%> <a href="c:\<%=name%>">世界文化.doc</a>Download.jsp文件------------------------------------------------------------------------------------------------------------------。
JSP乱码问题探讨摘要:SP是以Java编程语言为基础的跨平台WEB开发技术,在全球WEB开发领域都占据了很大的空间,然而在JSP中处理和显示中文时常常出现问题。
本文对JSP中文显示乱码问题产生的原因作了分析,并提出相应的较为简单的解决方案。
关键词:JSP 乱码0 引言SUN公司在Java的基础上开发出来的JSP(Java Server Pages)实现了动态页面与静态页面的分离、脱离了硬件平台的束缚,以及编译后运行等方式,大大提高了其执行效率而逐渐成为因特网上的主流开发工具。
Java 语言在内部采用Unicode表示字符,Unicode是用两个字节表示一个字符的字符编码。
而我们通常使用的中文字符编码如GB2312,GBK等都是双字节字符集,与Unicode的编码机制有很大差别,所以在中文环境下,就存在一个编码转换的问题。
然而,在这个方面,Java或是JSP做的并不完善。
1 JSP乱码解决方案现状分析在JSP技术中,数据采用的默认编码格式并不支持中文,因此,当涉及到中文的时候,必须做出一定的编码转换才能支持中文显示。
虽然某些开发环境提供了一些解决方案,例如在Tomcat中,编辑web.xml里面的filter标签来解决一些问题,还比如编写一些编码转换的JavaBean来解决问题,然而,在笔者看来,这些都有些复杂,不适合初学者掌握,并且其处理的结果往往不尽如人意。
编辑web.xml需要我们掌握一定的XML方面的知识,编写JavaBean要求我们的Java基础足够扎实,难道没有这些,就处理不了JSP的中文显示乱码问题了吗?下一节中给出了比较简单的解决方案,并且被证明是行之有效的。
2 JSP乱码解决方案想解决JSP乱码问题,就必须对JSP乱码进行一定的认识,把乱码问题分为三类,基本上囊括了日常出现的乱码问题。
2.1 第一类出现的问题:JSP服务器端编辑页面上是中文,但是浏览器看到的是乱码。
分析:浏览器端遇到中文不能正确显示,首先应该检查浏览器是否支持中文,浏览器的编码是否设置正确。
一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>对不同的WEB服务器和不同的JDK版本,处理结果就不一样。
原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。
解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。
完整页面如下:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>二、表单提交中文时出现乱码下面是一个提交页面(submit.jsp),代码如下:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1" method="post" action="process.jsp"><div align="center"><input type="text" name="name"><input type="submit" name="Submit" value="Submit"></div></form></body></html>下面是处理页面(process.jsp)代码:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%=request.getParameter("name")%></body></html>如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。
JSP中⽂乱码问题(Eclipse)默认已设置以下属性为“utf-8”contentType=”text/html;charset=UTF-8”的作⽤是指定服务器响应给浏览器的编码。
pageEncoding=”UTF-8”的作⽤是设置JSP编译成Servlet时使⽤的编码。
JSP要经过两次的“编码”,第⼀阶段会⽤pageEncoding,第⼆阶段会⽤utf-8⾄utf-8,第三阶段就是由Tomcat出来的⽹页,⽤的是contentType。
第⼀阶段是jsp转译(翻译)成.Java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码⽅案翻译成统⼀的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中⽂乱码。
第⼆阶段是从源码(.java)编译到字节码⽂件(.class),不论JSP编写时候⽤的是什么编码⽅案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
JAVAC⽤UTF-8的encoding 读取java源码,编译成UTF-8 encoding的⼆进制码(即.class),这是JVM对常数字串在⼆进制码(java encoding)内表达的规范。
第三阶段是Tomcat(或其的application Container)载⼊和执⾏阶段⼆的来的JAVA⼆进制码,输出的结果,也就是在客户端见到的,这时隐藏在阶段⼀和阶段⼆的参数contentType就发挥了功效。
从Tomcat5.x开始,GET和POST⽅法提交的信息,Tomcat采⽤了不同的⽅式来处理编码,对于POST请求,Tomcat会仍然使⽤request.setCharacterEncoding⽅法所设置的编码来处理,如果未设置,则使⽤默认的iso-8859-1编码。
⽽GET请求则不同,Tomcat对于GET请求并不会考虑使⽤request.setCharacterEncoding⽅法设置的编码,⽽会永远使⽤iso-8859-1编码。
5种JSP页面显示为乱码的解决方法(3)5种JSP页面显示为乱码的解决方法if (value == null)this.ignore = true;else if (value.equalsIgnoreCase("true"))this.ignore = true;else if (value.equalsIgnoreCase("yes"))this.ignore = true;elsethis.ignore = false;}protected String se-le-ctEncoding(ServletRequest request) { return (this.encoding);}}同时在web.xml中添加一下片段:<!-- 为解决乱码问题而添加 --><filter><filter-name>SetCharacterEncoding</filter-name><filter-class>com.filters.SetCharacterEncodingFilter</filter-class> <init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param></filter><filter-mapping><filter-name>SetCharacterEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- 添加代码结束 -->教你5种JSP页面显示为乱码的解决方法2017-03-22 20:03 | #2楼jsp编程中网页显示出现乱码的情况,基本可以归为5类:1. 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页面的编码方式有两个地方需要设置:<%@ 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)。
中文乱码解决方案中文乱码问题是指在使用计算机软件或操作系统时,中文字符显示为乱码或其他非预期字符的情况。
中文乱码问题通常出现在以下几种情况下:1.编码不一致:中文乱码问题最常见的原因是编码不一致。
计算机中使用的编码方式有很多种,如UTF-8、GB2312、GBK等。
如果文件的编码方式与软件或操作系统的默认编码方式不一致,就会导致中文乱码。
解决该问题的方法是将文件的编码方式转换为与软件或操作系统一致的方式。
2.字体显示问题:中文乱码问题还可能与字体显示有关。
如果计算机中没有安装支持中文的字体,或字体文件损坏,就会导致中文字符显示为乱码或方框。
解决该问题的方法是通过安装正确的字体文件或修复字体文件来解决。
3.网页编码问题:在浏览网页时,如果网页的编码方式与浏览器的默认编码方式不一致,也会导致中文乱码。
解决该问题的方法是在浏览器中手动设置网页编码方式,或在网页头部指定正确的编码方式。
4.数据传输问题:中文乱码问题还可能与数据传输有关。
在进行数据传输时,如果数据的编码方式与传输协议或接收端的要求不一致,就会导致中文乱码。
解决该问题的方法是在数据传输的过程中进行编码转换,或在接收端进行适当的解码操作。
下面是一些常用的解决中文乱码问题的方法:3.设置浏览器编码方式:在浏览器的设置中,可以手动指定网页的编码方式。
可以尝试不同的编码方式,找到正确的方式显示中文字符。
4.检查数据传输设置:如果中文乱码问题是在数据传输过程中出现的,可以检查传输的设置是否一致。
比如,在进行数据库连接时,可以设置数据库的编码方式与应用程序的编码方式一致。
5.使用专业工具:如果以上方法无法解决中文乱码问题,可以考虑使用专业的中文乱码解决工具。
这些工具可以自动检测和修复中文乱码问题,提高处理效率。
总结起来,解决中文乱码问题需要确定问题的原因,然后采取相应的方法进行修复。
在处理中文乱码问题时,尽量使用标准的编码方式和字体文件,避免使用非标准或自定义的编码方式。
jsp乱码解决大全2007-06-12 20:45jsp中文显示乱码解决方案2006-12-27 22:56一、JSP页面显示乱码二、表单提交中文时出现乱码三、数据库连接大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。
一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>对不同的WEB服务器和不同的JDK版本,处理结果就不一样。
原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。
解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。
完整页面如下:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>二、表单提交中文时出现乱码下面是一个提交页面(submit.jsp),代码如下:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1" method="post" action="process.jsp"><div align="center"><input type="text" name="name"><input type="submit" name="Submit" value="Submit"></div></form></body></html>下面是处理页面(process.jsp)代码:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%=request.getParameter("name")%></body></html>如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。
真正解决jspSmartUpload组件上传下载文件时中文乱码问题!!!2008-10-28 16:32 2294人阅读评论(23 收藏举报1:当页面上传有参数时,中文会乱码,解决页面上中文参数乱码方法:修改类SmartUpload(中的upload(方法public void upload( throws ServletException,IOException,SmartUploadException{int i = 0;//boolean flag = false;boolean flag1 = false;//boolean flag2 = false;long l = 0L;//String s = "";//new String(;//String s2 = "";//new String(;String s4 = ""; //new String(;String s5 = ""; //new String(;String s6 = ""; //new String(;String s7 = ""; //new String(;String s8 = ""; //new String(;String s9 = ""; //new String(;String s10 = ""; //new String(;m_totalBytes = m_request.getContentLength(;m_binArray = new byte[m_totalBytes];int j;for(;i < m_totalBytes;i += j{try{m_request.getInputStream(;j = m_request.getInputStream(.read(m_binArray,i,m_totalBytes - i; }catch(Exception exception{throw new SmartUploadException("Unable to upload.";}}for(;!flag1 && m_currentIndex < m_totalBytes;m_currentIndex++{if(m_binArray[m_currentIndex] == 13{flag1 = true;}else{m_boundary = m_boundary + (charm_binArray[m_currentIndex]; }}if(m_currentIndex == 1{return;}for(m_currentIndex++;m_currentIndex < m_totalBytes;m_currentIndex =m_currentIndex + 2{String s1 = getDataHeader(;m_currentIndex = m_currentIndex + 2;boolean flag3 = s1.indexOf("filename" > 0;String s3 = getDataFieldValue(s1,"name";if(flag3{s6 = getDataFieldValue(s1,"filename";s4 = getFileName(s6;s5 = getFileExt(s4;s7 = getContentType(s1;s8 = getContentDisp(s1;s9 = getTypeMIME(s7;s10 = getSubTypeMIME(s7;}getDataSection(;if(flag3 && s4.length( > 0{if(m_deniedFilesList.contains(s5{throw new SecurityException("The extension of the file is denied to be uploaded (1015.";}if(!m_allowedFilesList.isEmpty( && !m_allowedFilesList.contains(s5{throw new SecurityException("The extension of the file is not allowed to be uploaded (1010.";}if(m_maxFileSize > 0L && (long((m_endData - m_startData + 1 > m_maxFileSize {throw new SecurityException("Size exceeded for this file : " + s4 + " (1105.";}l += (m_endData - m_startData + 1;if(m_totalMaxFileSize > 0L && l > m_totalMaxFileSize{throw new SecurityException("Total File Size exceeded (1110.";}}if(flag3{SmartFile file = new SmartFile(;file.setParent(this;file.setFieldName(s3;file.setFileName(s4;file.setFileExt(s5;file.setFilePathName(s6;file.setIsMissing(s6.length( == 0;file.setContentType(s7;file.setContentDisp(s8;file.setTypeMIME(s9;file.setSubTypeMIME(s10;if(s7.indexOf("application/x-macbinary" > 0{m_startData = m_startData + 128;}file.setSize((m_endData - m_startData + 1;file.setStartData(m_startData;file.setEndData(m_endData;m_files.addFile(file;}else{/***原来的代码,当页面上要传入中文参数时,乱码。
*///String s11 = new String(m_binArray,m_startData,(m_endData - m_startData + 1;/***2008-10-28 carton修改,解决页面传入中文参数乱码*/String s11 = new String(m_binArray,m_startData,(m_endData - m_startData + 1, "utf-8";m_formRequest.putParameter(s3,s11;}if((charm_binArray[m_currentIndex + 1] == '-'{break;}}}2:当上传时文件名为中文时,解决中文乱码修改类SmartUpload(中的getDataHeader(方法private String getDataHeader({//boolean flag = false;int i = m_currentIndex;int j = 0;for(boolean flag1 = false;!flag1;{if(m_binArray[m_currentIndex] == 13 && m_binArray[m_currentIndex + 2] == 13 {flag1 = true;j = m_currentIndex - 1;m_currentIndex = m_currentIndex + 2;}else{m_currentIndex++;}}/***原代码,当上传文件名为中文时,乱码*///String s = new String(m_binArray,i,(j - i + 1;//return s;/***2008-10-28 carton修改,解决上传文件中文乱码问题 */Stirng s = null;try {s = new String(m_binArray,i,(j - i + 1, "utf-8"; } catch (UnsupportedEncodingException e {e.printStackTrace(;}return s;}这样页面上就不用再转码了。
页面设置成"utf-8"编码即可。
附改好的jar包,和jspSmartUpload源代码.。