上几天,要做Jsp文件上传,上网Google了几下,发现多是用JspSmartUpload组件来实现上传,于是想将其应用到我的Struts应用里头,刚开始不太会用,随便写了个表单页面,就一个文件表单域,上传,OK,正确接收,但当应用到自已的项目里时,发现其它表单的信息出现乱码了,中文问题又出来了。
但是确定是加上了这句:enctype="multipart/form-data",还是不行,文件是可以正确获取了,只是其它的Text Input表单传来的中文怎么转换编码都不行,不能正确还原中文,我用的是UTF-8编码。我想,这应该是JspSmartUpload的问题吧,上网找了找,很多都没说过这问题,有很多文章都是说教你怎么用JspSmartUpload上传文件等等的,但那些例子都是只上传一个文件表单,没有混合上传与普通表单的信息。
郁闷了半天,既然是组件的问题,我想到想看看修改它的源码来实现中文混合表单上传,我下载下来的都是Jar包的,都是已编译好的,又没时间上网找源码了,只好反编译一下,修改,再重新编译。唉,编译下来的类里面的变量名等等都很混乱,看起来有点麻烦,没办法了,一直跟踪运行下去吧,顺腾摸瓜了。把几个 Class反编译下来后,找到了根源,在SmartUpload.class里,在upload函数下,找到这里 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1); 经测试,这里是返回表单内容信息的String,看看他的构造函数,它没有定义该String的Chartset,所以当然中文会出现乱码了,用的是默认的西方ISO8859-1的编码,所以中文在这里没有得到正确转换。为了方便起建,我在该类定义了一个静态变量 : private static String charset = "iso8859-1"; 现写个get set方法,在刚先的表单内容的String里改一下,使用四个参数的构造函数,最后那个参数为编码字符集参数,写成 String s11 = new String(m_binArray,m_startData,(m_endData - m_startData) + 1,charset); OK,在使用时,将SmartUpload构造出来时,再设置它将要使用的字符集,之后使用混合上传,一切OK.
posted on 2008-07-29 12:37
姜大叔 阅读(877)
评论(5) 编辑 收藏 所属分类:
Java