随笔-31  评论-257  文章-0  trackbacks-0
    上几天,要做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

评论:
# re: JspSmartUpload 中文问题! 2008-10-02 21:02 | jelin
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

下载 SmartUpload 上传组件(中文终极解决版) 即可

http://download.csdn.net/source/640739

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  回复  更多评论
  
# re: JspSmartUpload 中文问题![未登录] 2009-02-25 08:26 | 东哥
ksn ksn   回复  更多评论
  
# re: JspSmartUpload 中文问题! 2009-04-25 22:48 | 一个人
楼主正解啊!谢谢  回复  更多评论
  
# re: JspSmartUpload 中文问题! 2009-06-19 14:21 | qqf
感谢 感谢啊  回复  更多评论
  
# re: JspSmartUpload 中文问题! 2009-08-01 15:52 | today
用UFOUpload(UFOUpload组件用于文件上传的Jsp Web Server端的类)组件能从根本上解决乱码问题,效果很好,发布网址:www.gm365.com 。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: