zoukankan      html  css  js  c++  java
  • 请求时参数到后台解码时会出现乱码问题

    背景:在前台的表单输入框内输入中文再提交到服务器时,服务器就会对参数进行解码,这时,服务器会用iso8859-1码表去解析传来的utf-8编码的参数。这样一来尴尬的乱码就会出现...

      其因为就是服务器查错了码表导致编码和解码时使用的码表不一致

    如图:

        

    解决方案:

     在POST中 可通过  request.setCharacterEncoding("utf-8"); 方式来解决。但这种方法只能对POST有效,对GET无效。

      -->原因是这种方法是将请求实体用UTF-8来解码,该方法必须注意把这行代码写在获取任何参数的代码之前,但是在GET中是没有请求实体的所以无效....

      所以我们只能是通过反向编码来手动将二进制用UTF-8来解码,则最后就达成用什么码表编码就用什么码表解码;方法如下:

        byte[] bytes = 需要解码的参数.getBytes("iso8859-1");
             需要解码的参数= new String(bytes, "utf-8");

    1 String username = request.getParameter("username");
    2         
    3 //反向解码得出username对应的二机制序列
    4 byte[] bytes = username.getBytes("iso8859-1");
    5 username = new String(bytes, "utf-8");
    6         
    7 System.out.println("username: "+username);

    解决乱码的思路图:

      

    大概解释:”张飞“ 参数是以二进制传到服务器,服务器接到参数二进制时会根据iso8859-1码表来查询相应二进制的编码,因为在iso8859-1中没有中文所有在查询码表后出现的结果就是类似 "??????" 这样 。

          然后为了解决这个编码问题则我们手动将 "??????" 这个编码通过getBytes("iso8859-1")方法来重新得到与刚传入服务器时一直的二进制编码。

          这时得到正确的二进制后通过 new String("二进制",utf-8) 对象来手动用UTF-8来重新解析二进制。得到的结果就是 ”张飞“ 这个参数值。

      

  • 相关阅读:
    BUUCTF-[强网杯 2019]随便注
    Oracle 存储过程
    java.lang.OutOfMemoryError: Java heap space
    Oracle 约束
    Docker 学习1 容器技术基础入门
    Kubernetes 学习1 Devops 核心要点和k8s架构概述
    mysql Sql语句
    Shell 编程详解
    git 学习
    Linux awk学习
  • 原文地址:https://www.cnblogs.com/tongxuping/p/6891365.html
Copyright © 2011-2022 走看看