编码问题(java html servlet)

前提
1、tomcat版本:8.5.70
2、html的格式如下:GB2312编码、GET方式表单提交


```html
<head>
    <meta charset="GB2312">
    <title>Title</title>
</head>
<body>
<form enctype="application/x-www-form-urlencoded" action="http://localhost:8080/Web_Test_for_Study_war_exploded/one" method="GET">
    <input type="text" name="name" value="张三">
    <input type="submit" value="submit">
</form>

Servlet处理

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String nameStr = req.getParameter("name");//name是html提交的“张三”;

        //直接打印:
        System.out.println(nameStr);//输出:"????"

        //各自的字节数组及长度
        byte[] bytesStrUTF = nameStr.getBytes("UTF-8");
        byte[] bytesStrIso = nameStr.getBytes("iso-8859-1");
        byte[] bytesStrGB2312 = nameStr.getBytes("GB2312");
        System.out.println(bytesStrUTF.length);//输出:"12"
        System.out.println(bytesStrIso.length);//输出:"4"
        System.out.println(bytesStrGB2312.length);//输出:"4"

        //各自的打印
        System.out.println(new String(bytesStrUTF,"UTF-8"));//输出:"????"
        System.out.println(new String(bytesStrIso,"iso-8859-1"));//输出:"????"
        System.out.println(new String(bytesStrGB2312,"GB2312"));//输出:"????"

        //两两组合打印
        System.out.println(new String(bytesStrUTF,"GB2312"));//输出:"锟斤拷锟斤拷"
        System.out.println(new String(bytesStrUTF,"iso-8859-1"));//输出:"????????????"
        System.out.println(new String(bytesStrIso,"UTF-8"));//输出:"????"
        System.out.println(new String(bytesStrIso,"GB2312"));//输出:"????"
        System.out.println(new String(bytesStrGB2312,"UTF-8"));//输出:"????"
        System.out.println(new String(bytesStrGB2312,"iso-8859-1"));//输出:"????"
    }

自己的猜想
自己以为的是:html采用GB2312编码,其次经过URLEncoder编码,最后再通过iso编码发送出去。而服务器tomcat经过iso解码,得到URL编码,再解码得到原来的GB2312的字节流,但是tomcat8.5版本会采用UTF-8进一步解码并存储在内存中。所以我以为直接通过UTF-8得到原字节流,再使用GB2312解码即可,但事实上打脸了,所以玩了一下排列组合,关键还没组合出来。郁闷。多谢解答。

web 那里设置 utf-8 ,servlet 刚进来先 req.setCharacterEncoding("utf-8"); 再去get name 试试呢?