最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Request獲取請求數(shù)據(jù)中文亂碼問題

 更新時間:2024年07月08日 11:21:32   作者:HuanLe.  
這篇文章主要介紹了Request獲取請求數(shù)據(jù)中文亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Tomcat在7以及更低版本時,解析中文的字符集默認(rèn)為ISO-8859-1,并且是在底層寫死的,所以瀏覽器發(fā)送Get請求或者時Post請求時,字符集格式不匹配,從而引發(fā)中文亂碼。

但是Tomcat更新到8版本后,默認(rèn)字符集就更換為了UTF-8。

一、當(dāng)Request請求字母時,輸出正常

package com.huanle.web;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
/**
 * @author 歡了
 * @version 1.0
 */
@WebServlet("/req3")
public class RequestDemo3 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("==========字母情況下===========");
        String username = request.getParameter("username");
        System.out.println(username);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

啟動Tomcat 在輸入框 姓名里 輸入字母abc

點(diǎn)擊提交跳轉(zhuǎn)到上面代碼開始執(zhí)行

控制臺打印abc

一切正常

二、當(dāng)Request請求參數(shù)為漢字時

啟動Tomcat 在姓名框中輸入中文 張三

跳轉(zhuǎn)頁面

看控制臺的輸出

輸入的張三在控制臺里呈現(xiàn)的就是亂碼

三、使用偽代碼了解亂碼的形成

解決亂碼問題之前,首先我們要了解亂碼的形成。

我們寫一個測試類,里面用到了URL編碼,我們先了解一下;

URL編碼

  • 1. 將字符串按照編碼格式轉(zhuǎn)為二進(jìn)制
  • 2.每個字節(jié)轉(zhuǎn)為2個16進(jìn)制數(shù),并在前面加上 %

例如 張三

假設(shè)瀏覽器給Tomcat發(fā)送的字符集格式為UTF-8,即編碼格式為UTF-8;Tomcat也用UTF-8來接收,即解碼格式也為UTF-8,那么就可以正常的接收到 "張三" 。

但是由于tomcat的默認(rèn)解碼是ISO-8859-1,并且還是底層是寫死的,就只能走下面示例tomcatDecode對象(亂碼)。

tomcatDecode對象直接轉(zhuǎn)UTF-8雖然會出問題,但是底層的二進(jìn)制是不會變的,我們就有了一個思路:

先將tomcatDecode的解碼%E5%BC%A0%E4%B8%89 轉(zhuǎn)為字節(jié)數(shù)組(-27 -68 -96 -28 -72 -119)

再將字節(jié)數(shù)組轉(zhuǎn)為字符串。

package com.huanle.web;
 
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
 
/**
 * @author 歡了
 * @version 1.0
 *
 * 演示瀏覽器的URL編碼 和 tomcat的URL解碼
 * 以及解決默認(rèn)tomcat字符集中文亂碼
 */
public class UrlDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        String username = "張三";
 
        //URL編碼
        String encode = URLEncoder.encode(username, "UTF-8");
        System.out.println(encode);//%E5%BC%A0%E4%B8%89
 
 
        //URL解碼
        String decode = URLDecoder.decode(encode, "UTF-8");
        System.out.println(decode);//張三
 
        //但是tomcat的默認(rèn)解碼是ISO-8859-1,并且底層是寫死的
        String tomcatDecode = URLDecoder.decode(encode, "ISO-8859-1");
        System.out.println(tomcatDecode);
 
        /**
         * 解決get請求的中文亂碼
         *      將tomcat的亂碼,先用tomcat默認(rèn)的字符集ISO-8859-1轉(zhuǎn)為字節(jié)數(shù)組  編碼
         *      再將字節(jié)數(shù)組轉(zhuǎn)為字符串  解碼
         * */
        byte[] bytes = tomcatDecode.getBytes("ISO-8859-1");
        //可以先遍歷看一下
        for (byte b : bytes) {
            System.out.print(b + " ");
        }//-27 -68 -96 -28 -72 -119 
        //換行
        System.out.println();
        //將這些十進(jìn)制轉(zhuǎn)為字符串
        String s = new String(bytes, "UTF-8");
        System.out.println(s);//張三
    }
}

最終的結(jié)果如下:

四、Request請求參數(shù)中文亂碼-Post請求解決方案

講完上面的案例,大家也就知道為什么中文會出現(xiàn)亂碼了,我們就在代碼中解決

因?yàn)镻ost是通過流的getReader()方法來傳輸數(shù)據(jù),只需要改變流的編碼格式為utf-8即可

我們需要用到一個方法 setCharacterEncoding(""); //這里的參數(shù)是編碼格式

啟動Tomcat 姓名為 張三

跳轉(zhuǎn)頁面后沒有顯示請求參數(shù) ,所以是Post請求

package com.huanle.web;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
/**
 * @author 歡了
 * @version 1.0
 *
 * 中文亂碼解決方案
 */
@WebServlet("/req4")
public class RequestDemo4 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.先解決亂碼問題Post,因?yàn)镻ost是通過流getReader()方法 傳輸數(shù)據(jù),改變流的編碼格式為utf-8
        request.setCharacterEncoding("utf-8");
 
 
        //2.獲取username
        System.out.println("==========獲取username=========");
        String username = request.getParameter("username");
        System.out.println("解決后" + username);
 
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

輸出正常! 解決~

五、Request請求參數(shù)中文亂碼-Get請求解決方案

get請求就很像我們舉得測試類里的例子

先將亂碼的數(shù)據(jù)轉(zhuǎn)成字節(jié)數(shù)組

再將字節(jié)數(shù)組轉(zhuǎn)成字符串

package com.huanle.web;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
/**
 * @author 歡了
 * @version 1.0
 *
 * 中文亂碼解決方案
 */
@WebServlet("/req4")
public class RequestDemo5 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
        //1.獲取username
        System.out.println("==========獲取username=========");
        String username = request.getParameter("username");
        System.out.println("解決前:" + username);
 
 
        //2.解決亂碼問題Get Get是通過getQueryString
        //  亂碼原因,tomcat進(jìn)行URL解碼的時候用的是ISO-8859-1的字符集,和頁面字符集不匹配
        //  解決方案:
        //  2.1   先將亂碼的數(shù)據(jù)轉(zhuǎn)成字節(jié)數(shù)組
        //  2.2   再將字節(jié)數(shù)組轉(zhuǎn)成字符串
        byte[] bytes = username.getBytes("ISO-8859-1");
        String s = new String(bytes, "UTF-8");
        System.out.println("解決后:" + s);
 
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

啟動Tomcat

跳轉(zhuǎn)頁面,有顯示參數(shù),表明是Get請求

輸出正常!解決~

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Security與SaToken的對比與優(yōu)缺點(diǎn)分析

    Spring Security與SaToken的對比與優(yōu)缺點(diǎn)分析

    這篇文章主要介紹了Spring Security與SaToken的對比與優(yōu)缺點(diǎn)分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-05-05
  • Java中的LinkedHashSet和TreeSet解讀

    Java中的LinkedHashSet和TreeSet解讀

    這篇文章主要介紹了Java中的LinkedHashSet和TreeSet解讀,哈希表和鏈表實(shí)現(xiàn)的set接口哈希表決定了它元素是唯一的,而鏈表則保證了他是有序的(存儲和取出順序一致),元素按照一定規(guī)則排序,不是按儲存時間排的,需要的朋友可以參考下
    2023-09-09
  • Java提示缺少返回語句的解決辦法

    Java提示缺少返回語句的解決辦法

    在本篇文章里小編給大家分享了關(guān)于Java提示缺少返回語句的解決辦法以及相關(guān)知識點(diǎn),需要的朋友們參考下。
    2019-07-07
  • 詳解在spring中使用JdbcTemplate操作數(shù)據(jù)庫的幾種方式

    詳解在spring中使用JdbcTemplate操作數(shù)據(jù)庫的幾種方式

    這篇文章主要介紹了詳解在spring中使用JdbcTemplate操作數(shù)據(jù)庫的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot實(shí)現(xiàn)文件斷點(diǎn)續(xù)傳功能詳解

    SpringBoot實(shí)現(xiàn)文件斷點(diǎn)續(xù)傳功能詳解

    在處理大文件傳輸或網(wǎng)絡(luò)不穩(wěn)定的情況下,文件斷點(diǎn)續(xù)傳功能顯得尤為重要,本文將詳細(xì)介紹如何使用Spring Boot實(shí)現(xiàn)文件的斷點(diǎn)續(xù)傳功能,需要的可以了解下
    2025-04-04
  • Java中使用While語句自增運(yùn)算遍歷數(shù)組典型實(shí)例

    Java中使用While語句自增運(yùn)算遍歷數(shù)組典型實(shí)例

    這篇文章主要介紹了Java中使用While語句自增運(yùn)算遍歷數(shù)組典型實(shí)例,本文直接給出實(shí)例代碼,并對每一句代碼都注解了詳細(xì)注釋,需要的朋友可以參考下
    2015-06-06
  • spring事物傳播propagation類別含義詳解

    spring事物傳播propagation類別含義詳解

    這篇文章主要介紹了spring事物傳播propagation類別含義詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • SpringCloud注冊中心部署Eureka流程詳解

    SpringCloud注冊中心部署Eureka流程詳解

    Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的
    2022-11-11
  • Java動態(tài)數(shù)組ArrayList實(shí)現(xiàn)動態(tài)原理

    Java動態(tài)數(shù)組ArrayList實(shí)現(xiàn)動態(tài)原理

    ArrayList是一種動態(tài)數(shù)組,它可以在運(yùn)行時自動調(diào)整大小以適應(yīng)元素的添加和刪除,在Java中,你可以使用ArrayList類來實(shí)現(xiàn)動態(tài)數(shù)組,本文將給大家介紹一下ArrayList動態(tài)數(shù)組,是怎么實(shí)現(xiàn)動態(tài)的
    2023-08-08
  • Java讀取網(wǎng)頁內(nèi)容并下載圖片的實(shí)例

    Java讀取網(wǎng)頁內(nèi)容并下載圖片的實(shí)例

    這篇文章主要介紹了Java讀取網(wǎng)頁內(nèi)容并下載圖片的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09

最新評論

安宁市| 乌兰察布市| 扶风县| 申扎县| 姜堰市| 香格里拉县| 玉林市| 惠安县| 邹平县| 常德市| 涡阳县| 惠安县| 大邑县| 伊春市| 正安县| 建德市| 贵南县| 肇州县| 富民县| 天津市| 松江区| 金塔县| 阳高县| 兴国县| 江孜县| 东丽区| 正宁县| 富平县| 革吉县| 弥勒县| 连州市| 泸溪县| 仁寿县| 兰州市| 和硕县| 治县。| 将乐县| 淮北市| 靖江市| 高碑店市| 博客|