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

HttpGet請(qǐng)求與Post請(qǐng)求中參數(shù)亂碼原因剖析與解決方案

 更新時(shí)間:2023年07月12日 11:55:39   作者:contact97  
這篇文章主要介紹了HttpGet請(qǐng)求與Post請(qǐng)求中參數(shù)亂碼原因剖析,文中有相關(guān)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下

1 Get請(qǐng)求

當(dāng)向服務(wù)器發(fā)送請(qǐng)求URL的請(qǐng)求時(shí) :localhost:8080/getinfo?username=張三,通常在服務(wù)端中解析username的參數(shù)值時(shí)會(huì)獲得一串難以解讀的字符信息。

1.1 原因解析

Get請(qǐng)求中的請(qǐng)求參數(shù)會(huì)拼接在請(qǐng)求URL中,當(dāng)URL中存在中文時(shí),瀏覽器會(huì)對(duì)請(qǐng)求URL進(jìn)行編碼,其中編碼的時(shí)候使用的是UTF-8字符集。Tomcat服務(wù)器解析請(qǐng)求發(fā)送的過來的報(bào)文時(shí)【參數(shù)信息主要是解析請(qǐng)求行的信息】采用的是ISO-8859-1字符集。由于編碼時(shí)和解碼時(shí)采用的字符集不一致,所以導(dǎo)致了亂碼。

ISO-8859-1字符集,屬于西歐字符集,支持英文、數(shù)字以及標(biāo)準(zhǔn)符號(hào),但是不支持中文字符集。

URL編碼是將每個(gè)字符按照編碼方式轉(zhuǎn)為二進(jìn)制,每個(gè)字節(jié)轉(zhuǎn)為2個(gè)16進(jìn)制數(shù)并在前邊加上%

1.2 代碼測(cè)試

/**
 * @Author lyf
 * @Date 2023/1/11 - 10:43
 * @Description URL編解碼
 * Get請(qǐng)求亂碼的原因分析
 **/
public class URLDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
         String name="張三";
         //瀏覽器采用UTF-8對(duì)URL編碼
        String encode = URLEncoder.encode(name, "UTF-8");
        System.out.println("UTF-8編碼"+encode);
        System.out.println("UTF-8解碼"+ URLDecoder.decode(encode, "UTF-8"));
        //Tomcat服務(wù)器使用ISO-8859-1字符集啊對(duì)URL進(jìn)行解碼
        String decode = URLDecoder.decode(encode, "ISO-8859-1");
        System.out.println("ISO-8859-1解碼"+ decode);
    }
}

控制臺(tái)輸出信息
UTF-8編碼%E5%BC%A0%E4%B8%89
UTF-8解碼張三
ISO-8859-1解碼å¼ ä¸‰

1.3 解決方案

** 值得注意的是,兩種不同的字符集底層的字節(jié)數(shù)組任然是一致的,所以可以考慮先轉(zhuǎn)換成字節(jié) 再將字節(jié)數(shù)組轉(zhuǎn)換為字符串**

  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
 {
    //獲得參數(shù)[存在中文時(shí),utf-8會(huì)對(duì)其進(jìn)行編碼,服務(wù)器端采用的是iso-0859-1進(jìn)行的解碼的信息]
    //該字符串是iso-0859-1解碼后的內(nèi)容
    //獲得URL中拼接的參數(shù)值 username
    String username= req.getParameter("username")
    //獲得iso-0859-1解碼下的字節(jié)數(shù)組
    byte[]bytes=username.getBytes(StandardCharsets.ISO_8859_1);
    //字節(jié)數(shù)組轉(zhuǎn)成字符串,以UTF-8進(jìn)行編碼
    username=new String(bytes,StandardCharsets.UTF_8);
 }

值得注意的是,Tomcat8之后已解決Get請(qǐng)求的亂碼的情形,設(shè)置默認(rèn)的解碼方式為UTF-8。由于req.getParameter()方法是Get 、Post獲取參數(shù)的通用方法。該解決方法同樣也使用于Post請(qǐng)求中參數(shù)亂碼的情況。

2 Post請(qǐng)求

當(dāng)向服務(wù)器發(fā)送Post請(qǐng)求時(shí),同時(shí)攜帶參數(shù)信息username=張三時(shí),與Get請(qǐng)求不同的是,參數(shù)不會(huì)拼接在請(qǐng)求行中【URL】,而是將參數(shù)信息設(shè)置在請(qǐng)求體中進(jìn)行傳輸。

2.1 原因解析

通常這種字符型的請(qǐng)求體信息,服務(wù)器也是通過獲得字符數(shù)據(jù)來進(jìn)行解析。req.getReader().readLine()。其中g(shù)etReader()中使用的字符集是ISO-8859-1字符集,不支持中文字符集,因此會(huì)亂碼。為了解決中文亂碼,就需要將ISO-8859-1轉(zhuǎn)換為UTF-8字符集,其中需要將請(qǐng)求和響應(yīng)報(bào)文中的字符集都設(shè)置為UTF-8

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //設(shè)置輸入流的編碼
        req.setCharacterEncoding("UTF-8");
        //設(shè)置輸出流的編碼
        resp.setCharacterEncoding("UTF-8");
        //獲得請(qǐng)求參數(shù)【post 與 get方法都可以用此方法獲得請(qǐng)求參數(shù)信息】  ,底層邏輯是通過req.getReader().readLine()去獲得請(qǐng)求體中的數(shù)據(jù)來對(duì)參數(shù)進(jìn)行處理的
        System.out.println(req.getParameter("username"));
    }

3 總結(jié)

以上分析可知,導(dǎo)致亂碼的情況可以歸納成輸入的字符集與輸出的字符集不一致的情況,為了解決亂碼的問題,需要將前后的字符集設(shè)置成一致。

到此這篇關(guān)于HttpGet請(qǐng)求與Post請(qǐng)求中參數(shù)亂碼原因剖析與解決方案的文章就介紹到這了,更多相關(guān)HttpGet請(qǐng)求與Post請(qǐng)求參數(shù)亂碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解HBase表的數(shù)據(jù)模型

    詳解HBase表的數(shù)據(jù)模型

    HBase 是一種列存儲(chǔ)模式與鍵值對(duì)存儲(chǔ)模式結(jié)合的 NoSQL 數(shù)據(jù)庫,它具有靈活的數(shù)據(jù)模型,不僅可以基于鍵進(jìn)行快速查詢,還可以實(shí)現(xiàn)基于值、列名等的全文遍歷和檢索,下面給大家介紹HBase表的數(shù)據(jù)模型,感興趣的朋友一起看看吧
    2022-05-05
  • 偽靜態(tài)技術(shù)介紹與優(yōu)缺點(diǎn)分析(較完整篇)

    偽靜態(tài)技術(shù)介紹與優(yōu)缺點(diǎn)分析(較完整篇)

    偽靜態(tài)太適合用在普通的企業(yè)網(wǎng)站上了——既不要求高并發(fā),但同時(shí)又很在乎seo(搜索引擎優(yōu)化),而且也要求后臺(tái)可動(dòng)態(tài)更新。
    2009-11-11
  • IntelliJ?IDEA運(yùn)行Tomcat報(bào)錯(cuò):Please,?configure?Web?Facet?first!解決辦法

    IntelliJ?IDEA運(yùn)行Tomcat報(bào)錯(cuò):Please,?configure?Web?Facet?fir

    這篇文章主要介紹了IntelliJ IDEA運(yùn)行Tomcat報(bào)錯(cuò):Please,configure Web Facet first!的解決辦法,文中包括問題現(xiàn)象、常見原因、解決方案(包括普通Web目錄結(jié)構(gòu)和Maven標(biāo)準(zhǔn)結(jié)構(gòu)的具體配置)、常見問題排查等部分,需要的朋友可以參考下
    2026-05-05
  • ClaudeCode中的Agent系統(tǒng)工作原理、如何使用和自定義開發(fā)

    ClaudeCode中的Agent系統(tǒng)工作原理、如何使用和自定義開發(fā)

    本文介紹了ClaudeCode中的Agent系統(tǒng),包括其工作原理、內(nèi)置Agent的使用方法、如何創(chuàng)建自定義Agent以及優(yōu)秀的Agent框架BMAD-Method,通過使用Agent,可以提高開發(fā)效率,提升專業(yè)知識(shí),并促進(jìn)團(tuán)隊(duì)協(xié)作
    2026-03-03
  • Elasticsearch之文檔批量操作示例

    Elasticsearch之文檔批量操作示例

    這篇文章主要為大家介紹了Elasticsearch之文檔批量操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • C++,C#,Rust,Go,Java,Python,JavaScript的性能對(duì)比全面講解

    C++,C#,Rust,Go,Java,Python,JavaScript的性能對(duì)比全面講解

    這篇文章主要介紹了C++,C#,Rust,Go,Java,Python,JavaScript性能對(duì)比全面講解的相關(guān)資料,這些語言各有特點(diǎn),適用于不同的開發(fā)需求,C++和Rust在系統(tǒng)級(jí)和高性能任務(wù)中表現(xiàn)出色,而Python和JavaScript則更適合快速原型和Web開發(fā),需要的朋友可以參考下
    2025-12-12
  • 超好用的免費(fèi)內(nèi)網(wǎng)穿透工具【永久免費(fèi)不限制流量】

    超好用的免費(fèi)內(nèi)網(wǎng)穿透工具【永久免費(fèi)不限制流量】

    對(duì)于開發(fā)人員來講,演示內(nèi)網(wǎng)web站點(diǎn)、本地開發(fā)微信公眾號(hào)、小程序開發(fā)、調(diào)試第三方支付系統(tǒng)對(duì)接等開發(fā)環(huán)境,往往需要一個(gè)環(huán)境可以進(jìn)行調(diào)試,市面上內(nèi)網(wǎng)穿透工具有很多,這里推薦一款簡(jiǎn)單又好用的cpolar,可以永久免費(fèi)使用,不限制流量,支持http/https/tcp協(xié)議
    2022-09-09
  • DDoS攻擊多種方式的原理分析和防護(hù)方法總結(jié)

    DDoS攻擊多種方式的原理分析和防護(hù)方法總結(jié)

    DDoS攻擊通過多主機(jī)發(fā)起海量請(qǐng)求,導(dǎo)致服務(wù)器過載,影響服務(wù),攻擊方式包括僵尸網(wǎng)絡(luò)、漏洞利用等,分為SYN?flood、ACK?flood、UDP?flood、反射放大、空連接、CC攻擊等,防御手段有云原生、CDN安全、DDOS高防、硬件防護(hù)、運(yùn)營(yíng)商流量壓制
    2025-05-05
  • ceph集群RadosGW對(duì)象存儲(chǔ)使用詳解

    ceph集群RadosGW對(duì)象存儲(chǔ)使用詳解

    這篇文章主要為大家介紹了ceph集群RadosGW對(duì)象存儲(chǔ)使用詳解,有需要的,朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • idea激活碼最新獲取方法(idea2020激活碼匯總)

    idea激活碼最新獲取方法(idea2020激活碼匯總)

    針對(duì)idea激活碼失效的情況,我們給大家?guī)碜钚碌膇dea激活碼以及相關(guān)激活教程,分享最新idea激活參數(shù)等信息。
    2020-02-02

最新評(píng)論

山阳县| 岫岩| 台北市| 临澧县| 新巴尔虎右旗| 巴彦县| 渝中区| 和林格尔县| 九江市| 灌阳县| 蓬安县| 汉中市| 达日县| 新晃| 云浮市| 昭平县| 贵州省| 东兴市| 沂水县| 湘潭县| 中牟县| 城市| 汝城县| 花垣县| 莲花县| 邛崃市| 龙江县| 临沂市| 资阳市| 日照市| 西城区| 平邑县| 祁阳县| 丹寨县| 黄龙县| 石景山区| 乐都县| 东安县| 宣汉县| 锦州市| 勐海县|