日期:2014-05-16  浏览次数:20427 次

jspsmartupload,smartupload UTF8 版,解决乱码问题
1 参考资料
A [url]http://hi.baidu.com/icelove0918/blog/item/d37a240645cae378020881b2.html [/url]
B http://zhouwenjun.iteye.com/blog/542333
C http://javay.iteye.com/blog/293409
D http://blog.tianya.cn/blogger/post_show.asp?BlogID=769988&PostID=10095284
E http://tanganping.iteye.com/blog/81615

2 原因:
JSP页面设置编码:
<%@ page language="java" pageEncoding="UTF-8"%>
使用smart-upload.jar上传后台后到中文值出现乱码,使用过滤器及设置转码也没效果,页面设置为GBK,GB2312提交后台中文显示正常,参考以下资料
总结如下:
使用jspsmart.jar要修改代码:由于各版本不同,修改也有所变化
A 第一种修改方式:
private String getDataHeader() {
	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 = null;
		try {
			// 修改代码,首先得到响应的字符编码类型,然后对得到的字符串进行编码。
			String encode = m_response.getCharacterEncoding();
			if (encode.equalsIgnoreCase("UTF-8")) {
				s = new String(m_binArray, i, (j - i) + 1, "UTF-8");
			} else {
				s = new String(m_binArray, i, (j - i) + 1);
			}

		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		// 修改结束
		return s;
}

B 第二种修改方式
反编译com.jspsmart.upload.SmartUpload,把SmartUpload.java中public void upload()的
String s9 = new String(m_binArray, m_startData, (m_endData - m_startData) + 1);

改为
String s9 = new String(m_binArray, m_startData, (m_endData - m_startData) + 1, "UTF-8");

重新编译后打包.
form中添加字符编码属性accept-charset="UTF-8"
有其它方式是已经打包好了.jar包,见附件. 
3 我的处理方式
用smart-upload-src.rar中的源码可以解决乱码问题,但将之在myeclipse中使用自带的打包工具后使用时出现乱码
1 楼 四十一号 2012-04-29  
谢谢分享,好东西
2 楼 yxyysu 2012-05-21  
请问,哪个是能解决文件中文名字乱码问题的,我试了,这三个好像都不行。还是我使用的方式不对。