说明:Tomcat9 传输编码:
    get: utf-8(request.getParameter直接获取,不乱码)
    post: iso-8859-1(需转utf-8)




1.post参数请求
  iso-8859-1

<form action="#" method="post">
    <input type="hidden" name="abc" value="abc中文" />
    <input type="submit" name="submit" value="请求"/>
</form>

问题说明:
String abc = request.getParameter("abc");  直接获取值乱码

处理方法:
String str = new String(abc.getBytes("iso-8859-1"), "utf-8");





2.post上传文件,获取到的文件名编码
  gbk(部分乱码)
  
  备注:没处理好这个问题,文件名用前端JS获取写入input传输

<form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" name="submit" value="上传"/>
</form>

问题说明:
import javax.servlet.http.Part;

Part part = request.getPart("file");
String name1 = part.getSubmittedFileName(); //获取文件名,这就出现乱码
String name2 = new String(name1.getBytes("gbk"), "utf-8"); //汉字部分乱码


处理方法:

前端
<form action="#" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="hidden" name="filename" value="" />
    <input type="submit" name="submit" value="上传"/>
</form>

js:
$("input[name='file']").change(function (e) {
    var s = e.currentTarget.files[0].name;
    $("input[name='filename']").val(s);
});


java(获取值):
String filename = request.getParameter("filename"); //文件名,带后缀
String name = new String(filename.getBytes("iso-8859-1"), "utf-8");


注:该方法也只是绕过了问题,只能说程序对国人的友好太差。


实测:Windows,Linux兼容
String name = new String(filename.getBytes("iso-8859-1"), "utf-8");