在使用Apache组件commons-fileupload上传下载文件时的几种乱码情况。
1.上传文件时后台获取文件名文本域乱码问题
通过item.isFormFied()判断upload.parseRequest(req)返回List<FileItem>中那些为文本域反之为文件
获取文件名:(FileItem) item.getName()
1) (ServletFileUpload)upload.setHeaderEncoding("UTF-8");
2) 在upload.parseRequest(req); 之前将(HttpServletRequest)req.setCharacterEncoding("UTF-8");
获取文本:(FileItem) item.getString()
1)(FileItem) item.getString("UTF-8");
2.下载文件时文件名乱码问题
resp.setContentType("application/x-msdownload");
// setHeader()详细:https://www.cnblogs.com/mingforyou/p/3281945.html
resp.setHeader("Content-Disposition", "attachment;filename=" +
URLEncoder.encode(filename,"UTF-8"));
URLEncoder.encode() url转码,URLEncoder.decode()解码
String strTest = "?=abc?中%1&2<3,4>";
strTest = URLEncoder.encode(strTest, "UTF-8");
System.out.println(strTest);%3F%3Dabc%3F%E4%B8%AD%251%262%3C3%2C4%3E
strTest = URLDecoder.decode(strTest,"UTF-8");
System.out.println(strTest);?=abc?中%1&2<3,4>