我也遇到多类似问题
linux+tomcat+jsp 没用struct,上传组件用的是,smartupload
也是上传后中文名成乱码.至今没有解决这个问题
转换编码的方法不行.网上的解决方案是改smartupload源码,重新编译(smartupload上传用的编码对中文支持有问题).但是现在找不到smartupload的源码,官网也关了.
我暂时是把网站就放在windows下使用,这样还没问题,但不是长久之际.
希望有人能解决一下,谢在先了
linux+tomcat+jsp 没用struct,上传组件用的是,smartupload
也是上传后中文名成乱码.至今没有解决这个问题
转换编码的方法不行.网上的解决方案是改smartupload源码,重新编译(smartupload上传用的编码对中文支持有问题).但是现在找不到smartupload的源码,官网也关了.
我暂时是把网站就放在windows下使用,这样还没问题,但不是长久之际.
希望有人能解决一下,谢在先了
无论是post还是get,只要传到到上传组件的页面中文就成乱码(smartupload控件是用javabean声明的,页面编码用的UTF-8)
我开始认为是编码的问题因为书上说IE发送请求时默认的是ISO-8859-1的编码,要正确的读取用户发送的中文数据就要编码转换.有两种方法:
1.request.setCharacterEncoding("gb2312");
2.clientData=new String(clientData.getBytes("ISO-8859-1"),"gb2312");
因为上传系统用户发送的中文数据(文件名)包含在表单的file值(文件绝对路径)的一部分,和通过表单的text发送中文数据的情况不一样.
我采取的办法是在文件上传的action中,在读取文件之前用方法2,将上传的文件名(formfile.getfilename获得)转换成gb2312,然后再用流读取上传文件,写入到目标路径.但还是不行.也许要用方法1吧.欢迎大家讨论啊!
1.request.setCharacterEncoding("gb2312");
还是用new String,还是同时用,都没办法解决乱码问题
但是在没有调用上传控件的页面采用上面的方法就不存在乱码了
说明上传控件肯定是有一定问题
改上传控件源码的方法在网上有成功的案例,但我还没有试过。
如果谁那儿有smartupload的源码,麻烦给一份,谢谢了
"H a l f H o u r @ s o h u . c o m"
如果在windows下用gb2312就没有乱码
如果在linux下使用,utf-8,就会有乱码
formfile即org.apache.struts.upload.formfile包.不过是struts自带的无须下载.
fileupload要到网上下载commons-fileupload-1.1-dev.jar.还用到commons-io-1.1-dev.jar。
还有个cos组件不太清楚
以上说的对吗?
我用struts不知选什么组件好啊!谁能比较下?
package com.sei.filter;import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import java.io.IOException;public class SetCharacterEncodingFilter implements Filter { protected FilterConfig filterConfig;
protected String encodingName;
protected boolean enable; public SetCharacterEncodingFilter() {
this.encodingName = "UTF-8";
this.enable = false;
} public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
loadConfigParams();
} private void loadConfigParams() {
//encoding
this.encodingName = this.filterConfig.getInitParameter("encoding");
//filter enable flag...
String strIgnoreFlag = this.filterConfig.getInitParameter("enable");
if (strIgnoreFlag.equalsIgnoreCase("true")) {
this.enable = true;
} else {
this.enable = false;
}
} public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
}
chain.doFilter(request, response);
} public void destroy() {
}}
web.xml
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.sei.filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>