社区
Web 开发
帖子详情
急!昨天弄了一个下午和晚上没弄出来,中文问题
hyc4132
2003-12-05 08:28:05
JSPSmartUpload上传文件解决中文文件名问题,我的编码是utf-8,上传文件时文件名只要是中文就是乱码,用谁做过着方面的,请求帮助小弟,或者有什么其他的组件能够解决这个问题的,请指点一下,多谢多谢!!
...全文
75
19
打赏
收藏
急!昨天弄了一个下午和晚上没弄出来,中文问题
JSPSmartUpload上传文件解决中文文件名问题,我的编码是utf-8,上传文件时文件名只要是中文就是乱码,用谁做过着方面的,请求帮助小弟,或者有什么其他的组件能够解决这个问题的,请指点一下,多谢多谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
crabyan
2003-12-07
打赏
举报
回复
agree dorcom
cucuchen
2003-12-07
打赏
举报
回复
另外请楼主特别注意:在tomcat+j2sdk下面对中文的支持有一种怪现象,如果你在提交页面使用了中文,post到处理页面将有可能会出现乱码!解决的办法如下:
在提交页面最顶上加上request.setCharacterEncoding("GB2312");
另外,我也是用的tomcat+smartupload上传文件,但是它很好的支持中文:根本不需要写什么函数转换.以下是源代码:
上传的例子
1、上传页面upload.html
本页面提供表单,让用户选择要上传的文件,点击"上传"按钮执行上传操作。
页面源码如下:
<!--
文件名:upload.html
作 者:cucuchen(chengang@rongji.com)
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<p> </p>
<p align="center">上传文件选择</p>
<FORM METHOD="POST" ACTION="jsp/do_upload.jsp"
ENCTYPE="multipart/form-data">
<input type="hidden" name="TEST" value="good">
<table width="75%" border="1" align="center">
<tr>
<td><div align="center">1、
<input type="FILE" name="FILE1" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">2、
<input type="FILE" name="FILE2" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">3、
<input type="FILE" name="FILE3" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">4、
<input type="FILE" name="FILE4" size="30">
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="上传它!">
</div></td>
</tr>
</table>
</FORM>
</body>
</html>
<%-- 文件名:upload.html
作 者:cucuchen(chengang@rongji.com)
--%>
<%@ page contentType="text/html; charset=gb2312" language="java"
import="java.util.*,com.jspsmart.upload.*" errorPage="" %>
<html>
<head>
<title>文件上传处理页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
// 新建一个SmartUpload对象
SmartUpload su = new SmartUpload();
// 上传初始化
su.initialize(pageContext);
// 设定上传限制
// 1.限制每个上传文件的最大长度。
su.setMaxFileSize(1000000);
// 2.限制总上传数据的长度。
su.setTotalMaxFileSize(2000000);
// 3.设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。
su.setAllowedFilesList("doc,txt");
// 4.设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat,
//jsp,htm,html扩展名的文件和没有扩展名的文件。
su.setDeniedFilesList("exe,bat,jsp,htm,html");
// 上传文件
su.upload();
// 将上传文件全部保存到指定目录,请在虚拟根目录下建一个upload文件夹
int count = su.save("/upload");
out.println(count+"个文件上传成功!<br>");
// 利用Request对象获取参数之值
out.println("TEST="+su.getRequest().getParameter("TEST")
+"<BR><BR>");
// 逐一提取上传文件信息,同时可保存文件。
for (int i=0;i<su.getFiles().getCount();i++)
{
com.jspsmart.upload.File file = su.getFiles().getFile(i);
// 若文件不存在则继续
if (file.isMissing()) continue;
// 显示当前文件信息
out.println("<TABLE BORDER=1>");
out.println("<TR><TD>表单项名(FieldName)</TD><TD>"
+ file.getFieldName() + "</TD></TR>");
out.println("<TR><TD>文件长度(Size)</TD><TD>" +
file.getSize() + "</TD></TR>");
out.println("<TR><TD>文件名(FileName)</TD><TD>"
+ file.getFileName() + "</TD></TR>");
out.println("<TR><TD>文件扩展名(FileExt)</TD><TD>"
+ file.getFileExt() + "</TD></TR>");
out.println("<TR><TD>文件全名(FilePathName)</TD><TD>"
+ file.getFilePathName() + "</TD></TR>");
out.println("</TABLE><BR>");
// 将文件另存,请在虚拟根目录下建一个download文件夹。
file.saveAs("/download/" + File.getFileName());
// 另存到以WEB应用程序的根目录为文件根目录的目录下
// file.saveAs("/download/" + File.getFileName(),
//su.SAVE_VIRTUAL);
// 另存到操作系统的根目录为文件根目录的目录下
// file.saveAs("c:\\temp\\" + File.getFileName(),
//su.SAVE_PHYSICAL);
}
%>
</body>
</html>
cucuchen
2003-12-07
打赏
举报
回复
jspSmartUpload虽然能下载文件,但对中文支持不足。若下载的文件名中有汉字,则浏览器在提示另存的文件名时,显示的是一堆乱码,很扫人兴。上面的例子就是这样。(这个问题也是众多下载组件所存在的问题,很少有人解决,搜索不到相关资料,可叹!)
为了给jspSmartUpload组件增加下载中文文件的支持,我对该组件进行了研究,发现对返回给浏览器的另存文件名进行UTF-8编码后,浏览器便能正确显示中文名字了。这是一个令人高兴的发现。于是我对jspSmartUpload组件的SmartUpload类做了升级处理,增加了toUtf8String这个方法,改动部分源码如下:
public void downloadFile(String s, String s1, String s2, int i)
throws ServletException, IOException, SmartUploadException
{
if(s == null)
throw new IllegalArgumentException("File ''" + s +
"'' not found (1040).");
if(s.equals(""))
throw new IllegalArgumentException("File ''" + s +
"'' not found (1040).");
if(!isVirtual(s) && m_denyPhysicalPath)
throw new SecurityException("Physical path is
denied (1035).");
if(isVirtual(s))
s = m_application.getRealPath(s);
java.io.File file = new java.io.File(s);
FileInputStream fileinputstream = new FileInputStream(file);
long l = file.length();
boolean flag = false;
int k = 0;
byte abyte0[] = new byte[i];
if(s1 == null)
m_response.setContentType("application/x-msdownload");
else
if(s1.length() == 0)
m_response.setContentType("application/x-msdownload");
else
m_response.setContentType(s1);
m_response.setContentLength((int)l);
m_contentDisposition = m_contentDisposition != null ?
m_contentDisposition : "attachment;";
if(s2 == null)
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" +
toUtf8String(getFileName(s)));
else
if(s2.length() == 0)
m_response.setHeader("Content-Disposition",
m_contentDisposition);
else
m_response.setHeader("Content-Disposition",
m_contentDisposition + " filename=" + toUtf8String(s2));
while((long)k < l)
{
int j = fileinputstream.read(abyte0, 0, i);
k += j;
m_response.getOutputStream().write(abyte0, 0, j);
}
fileinputstream.close();
}
/**
* 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
* 纵横软件制作中心雨亦奇2003.08.01
* @param s 原文件名
* @return 重新编码后的文件名
*/
public static String toUtf8String(String s) {
StringBuffer sb = new StringBuffer();
for (int i=0;i<s.length();i++) {
char c = s.charAt(i);
if (c >= 0 && c <= 255) {
sb.append(c);
} else {
byte[] b;
try {
b = Character.toString(c).getBytes("utf-8");
} catch (Exception ex) {
System.out.println(ex);
b = new byte[0];
}
for (int j = 0; j < b.length; j++) {
int k = b[j];
if (k < 0) k += 256;
sb.append("%" + Integer.toHexString(k).
toUpperCase());
}
}
}
return sb.toString();
}
注意源码中粗体部分,原jspSmartUpload组件对返回的文件未作任何处理,现在做了编码的转换工作,将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理,对中文则需要转换为%XX的形式。toUtf8String方法中,直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码,之后将其转换为%XX的形式。
将源码编译后打包成jspSmartUpload.jar,拷贝到Tomcat的shared/lib目录下(可为所有WEB应用程序所共享),然后重启Tomcat服务器就可以正常下载含有中文名字的文件了。另,toUtf8String方法也可用于转换含有中文的超级链接,以保证链接的有效,因为有的WEB服务器不支持中文链接。
小结:jspSmartUpload组件是应用JSP进行B/S程序开发过程中经常使用的上传下载组件,它使用简单,方便。现在我又为其加上了下载中文名字的文件的支持,真个是如虎添翼,必将赢得更多开发者的青睐。
hajavaor
2003-12-07
打赏
举报
回复
加个filter
mysam
2003-12-07
打赏
举报
回复
和老大一样的问题!有建议String title=new String(su.getRequest().getParameter("title").getBytes("ISO8859-1"),"gb2312");这样的,可是我没有成功,解决了email给我wyx@sdau.edu.cn
freezh
2003-12-06
打赏
举报
回复
car_no = new String(car_no.getBytes("ISO-8859-1"), "utf-8").toString();
从页面读的时候这样试试
King6860
2003-12-06
打赏
举报
回复
传过来的中文参数可以直接得到,不用在去处理了,
你可以试一下,我的程序就没有处理SMARTUPLOAD 传过来的中文参数;
freezh
2003-12-06
打赏
举报
回复
你不用utf_8用gb2312就没事
hyc4132
2003-12-06
打赏
举报
回复
麻烦你有没有现成的代码给我贴一份让我研究一下吧?我对编码格式太模糊了,而且项目很紧,我又是刚毕业的新手,谢了!!
zl9732
2003-12-06
打赏
举报
回复
写个方法吧,在需要转的地方调用~
hyc4132
2003-12-06
打赏
举报
回复
关于字符转换的太多了,我的是UTF-8,不知道该怎么转才能正常显示
gong1
2003-12-06
打赏
举报
回复
是eclipse的问题。
你的加他的语言包。
^_^
hyc4132
2003-12-06
打赏
举报
回复
我用的是tomcat4.1+Eclipse做的JSP,我在页面头部加了<%@ page contentType="text/html;charset=gb2312"%>就是乱码,只有加了utf-8才能正常显示,我不知道在哪里可以改,太郁闷了,其他地方都做完了,就这一块弄的我都晕了
abcpl
2003-12-06
打赏
举报
回复
我们使用jspsmartupload都没有涉及中文处理的问题,也许和你的设置有关
你可以这样
在你使用的页面使用
<%@ page contentType="text/html;charset=gb2312"%>
凡是通过request获得的变量进行iso转码
cocosunshine
2003-12-05
打赏
举报
回复
意见于dorcom兄相同~
tiannet
2003-12-05
打赏
举报
回复
ncu.http.MultiPartRequest mRequest = new ncu.http.MultiPartRequest(null,request,sRealPath);
mRequest.setAutoFileName(false);
mRequest.parseAndSave();
sFileName= mRequest.getFileName("file_input");
sData = mRequest.getParameter("yourdata");
form:enctype="multipart/form-data"
dorcom
2003-12-05
打赏
举报
回复
car_no = new String(car_no.getBytes("ISO-8859-1"), "GB2312").toString();
转换一下字符集,想怎么转,就怎么转,看你的字符集怎么设定了。
dike103
2003-12-05
打赏
举报
回复
UP
chenyubang
2003-12-05
打赏
举报
回复
我也有同样问题,关注啊~~~~~~
超全的英语短句汇集
English 900 英语九百句常用职位英文译名超级短句成语集锦打开话匣子PC电脑词汇一百个绝佳句型李阳英语365句托福听力常用短语校园英语迷你惯用语洋话连篇至理名言English 900 英语九百句第一册一、 Greetings ...
English 900 英语九百句
常用职位英文译名超级短句成语集锦打开话匣子PC电脑词汇一百个绝佳句型李阳英语365句托福听力常用短语校园英语迷你惯用语洋话连篇至理名言English 900 英语九百句第一册一、 Greetings 问候语 1. hello! / ...
同居的童话
(一)从公交车上下来, 一股热风扑面而来, 身上立刻起了层鸡皮. 空调车厢和外面燥热的阳光形成了巨大的反差, 让我一阵哚唆.“靠, 还真他妈热啊!” 我站在车站上扯了扯T恤的领口, 然后... 老家在福州100多公里以南的
一个
小
《那些年啊,那些事——
一个
程序员的奋斗史》六
本以为英汉字典的程序已经
没
有什么大
问题
了,
没
想到今天段伏枥想查
一个
单词,却发现事情根本就不是自己所料想的那么顺利:单词的查找速度太慢!这就奇怪了,之前为什么
没
有发现呢?说起来也让人啼笑皆非。之前之...
[转贴]针对女性朋友的各种骗术,一定要小心!
星期六
下午
2 点多 , 我
一个
人乘 70 路至四川路 . 当中我在和我老公通电话的时候发觉有人拍了下我的肩膀 . 刚开始我以为是遇到认识的人和我打招呼的 . 后来一看旁边是 40 多岁的男人 , 我并不认识 . 我想可能是这个...
Web 开发
81,092
社区成员
341,717
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章