【发布时间】:2011-06-28 14:56:52
【问题描述】:
我正在使用 Apache Commons Fileupload 工具进行标准文件上传。我的问题是,如果上传文件包含特殊字符(á、é、ú 等),我无法获得正确的文件名。它们都被转换为?迹象。
request.getCharacterEncoding() 表示 UTF-8,但我在字符串 fileItem.getName() 中得到的字节对于我的所有特殊字符都是相同的。
你能帮我看看有什么问题吗?
(一些细节:在 Windows 上使用 Firefox 3.6.12、Weblogic 10.3)
这是我的代码 sn-p:
public CommandMsg(HttpServletRequest request) {
Enumeration names = null;
if (isMultipart(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List uploadedItems = upload.parseRequest(request);
Iterator i = uploadedItems.iterator();
FileItem fileItem = null;
while (i.hasNext()) {
fileItem = (FileItem) i.next();
if (fileItem.isFormField()) {
// System.out.println("isFormField");
setAttribute(fileItem.getFieldName(), fileItem.getString());
} else {
String enc = "utf-8";
enc = request.getCharacterEncoding();
String fileName = fileItem.getName();
byte[] fnb = fileItem.getName().getBytes();
byte[] fnb2 = null;
try {
fnb2 = fileItem.getName().getBytes(enc);
String t1 = new String(fnb);
String t2 = new String(fnb2);
String t3 = new String(fnb, enc);
String t4 = new String(fnb2, enc);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
setAttribute(fileItem.getFieldName(), fileItem);
}
}
} catch (FileUploadException ex) {
ex.printStackTrace();
}
// etc..
【问题讨论】:
-
您是否尝试过使用和不解码文件名来获取文件名?在一个广泛使用的库中出现这样的问题,有点奇怪。
-
是的,如您所见,第一次尝试是:“String fileName = fileItem.getName();”这很糟糕。所有其他行(t1..4)只是绝望的尝试.. :-)
标签: java servlets file-upload character-encoding apache-commons