说明: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");