Я использую инструменты Apache Commons Fileupload для стандартной загрузки файлов. Моя проблема в том, что я не могу получить правильное имя файла загруженных файлов, если они содержат специальные символы (á, é, ú и т. Д.). Все они конвертируются в? знаки.
request.getCharacterEncoding () говорит UTF-8, но байты, которые я получаю в строке fileItem.getName (), одинаковы для всех моих специальных символов.
Можете ли вы помочь мне, что случилось?
(некоторые подробности: использование Firefox 3.6.12, Weblogic 10.3 в Windows)
Это мой фрагмент кода:
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..