qq_42044986 2021-09-13 17:19 采纳率: 50%
浏览 33
已结题

编码问题(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解码即可,但事实上打脸了,所以玩了一下排列组合,关键还没组合出来。郁闷。多谢解答。

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-09-13 17:43
    关注

    请求先经过tomcat编码,tomcat编码方式和页面不一致也是乱码的。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月21日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术
  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑