表单提交上传文件,中文文件名乱码解决方法

在写javaWeb项目的时候,写到了一个需要上传文件的功能。上传的时候,在前端提交页面,包含文件标题、文件介绍等需要填写的提交项。这些提交项,填写内容为数字,字母时,一切正常。但是当输入中文的时候,却出现了乱码的情况。此时Tomcat配置文件、web.xml配置文件、MySql的编码格式都统一为了“UTF-8”。其他需要写入数据库的功能,在遇到填写中文的时候,都一切正常。这个时候就可以排除Tomcat、web.xml、mysql这些配置是否出了问题。
程序运行,Vedio对象输出的结果在获取文件名(中文)、以及文件介绍(中文)的时候,会显示乱码,情况如下:
可以看到,出现了乱码。。
查询了网上很多的办法,要么是:
1     ServletFileUpload upload = new ServletFileUpload(factory);
2     upload.setHeaderEncoding("UTF-8"); 
要么是:
1     upload.setHeaderEncoding("ISO8859_1");
2     new String(item.getString().getBytes("ISO8859_1"),"UTF-8");

 

但是经过测试,显然都不好用、或者直接就是没用。最终在一篇博客里找到了正解,https://blog.csdn.net/qq_23937195/article/details/71655715?utm_source=blogkpcl2
这是博主给出的答案,自己试了一下,确实可行。
1     upload.setHeaderEncoding("UTF-8");
2     //然后对获取的FileItem执行如下转码方式
3     new String(item.getString("UTF-8");

但是后来自己发现,原来第一句upload.setHeaderEncoding("UTF-8")不设置也可以,看来问题是在获取value值得时候出现的。如下设置即可(在获取Value值时,进行编码设置,即item.getString("UTF-8");):

1 String name=item.getFieldName();
2 String value=item.getString("UTF-8");
3 map.put(name,value);
再次运行程序,问题完美解决。

 

 

posted @ 2020-01-12 17:02  奔跑的虫呙牛  阅读(1776)  评论(0)    收藏  举报