java request.getParameter中文亂碼解決方法
今天瀏覽項目時候,遇到一個問題,頁面用${requestScope.參數(shù)名 }獲取的值是亂碼,然后搜了一下,最后說是編碼的問題,附上查找的結(jié)果:

在Java 開發(fā)中,如果框架搭建的不完善或者初學(xué)者在學(xué)習(xí)過程中,出現(xiàn)中文亂碼是經(jīng)常的事兒(哈。誰讓發(fā)明java語言的不是中國人呢)
今天跟大家分享幾個解決java Web開發(fā)中,request.getParameter()獲取URL中文參數(shù)亂碼的解決辦法
解決問題,先要研究問題,URL傳中文參數(shù)為什么會出現(xiàn)亂碼?
原因:Http請求傳輸時將url以ISO-8859-1編碼,服務(wù)器收到字節(jié)流后默認(rèn)會以ISO-8859-1編碼來解碼成字符流(造成中文亂碼)
解決辦法:我們需要把request.getParameter(“參數(shù)名”)獲取到的字符串先用ISO-8859-1編碼成字節(jié)流,然后再將其用utf-8解碼成字符流
代碼:
String str = new String(request.getParameter("參數(shù)名").getBytes("iso-8859-1"), "utf-8");
這是通過轉(zhuǎn)碼的方式處理亂碼問題,我們也可以通過Tomcat配置文件,設(shè)置URL編碼集(URIEncoding)設(shè)置編碼,這種方法也是一勞永逸的,
修改Tomcat/conf 目錄下 server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8444" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>
重點在 userBodyEncodingForURI 和 URIEncoding 這兩個屬性
下面來解釋一下這兩個屬性的意義
useBodyEncodingForURI參數(shù)表示是否用request.setCharacterEncoding參數(shù)對URL提交的數(shù)據(jù)和表單中GET方式提交的數(shù)據(jù)進(jìn)行重新編碼,在默認(rèn)情況下,該參數(shù)為false。
URIEncoding參數(shù)指定對所有GET方式請求進(jìn)行統(tǒng)一的重新編碼(解碼)的編碼。
URIEncoding和useBodyEncodingForURI區(qū)別是
URIEncoding是對所有GET方式的請求的數(shù)據(jù)進(jìn)行統(tǒng)一的重新編碼, 而useBodyEncodingForURI則是根據(jù)響應(yīng)該請求的頁面的request.setCharacterEncoding參數(shù)對數(shù)據(jù)進(jìn)行的重新編碼,不同的頁面可以有不同的重新編碼的編碼
還有一種方法,通過重寫getParameter方法,設(shè)置解碼/方式來解決亂碼問題,請參照:Java防止xss攻擊 修改。
相關(guān)文章
SpringBoot+Resilience4j實現(xiàn)接口限流的示例代碼
Resilience4j 是一個用于實現(xiàn)熔斷、限流、重試等功能的輕量級庫,本文主要介紹了SpringBoot+Resilience4j實現(xiàn)接口限流的示例代碼,具有一定的參考價值,感興趣的可以了解一下2024-12-12
Java 實現(xiàn)簡易教務(wù)管理系統(tǒng)的代碼
這篇文章主要介紹了Java 實現(xiàn)簡易教務(wù)管理系統(tǒng)的代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
java.lang.ExceptionInInitializerError初始化程序中的異常錯誤的解決
java.lang.ExceptionInInitializerError?異常在?Java?中表示一個錯誤,該錯誤發(fā)生在嘗試初始化一個類的靜態(tài)變量、靜態(tài)代碼塊或枚舉常量時,本文就來介紹并解決一下,感興趣的可以了解一下2024-05-05
Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗證過程
這篇文章主要為大家介紹了Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗證過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-02-02
SpringBoot與SpringCloud的版本對應(yīng)關(guān)系解讀
本文介紹了SpringBoot與SpringCloud的版本對應(yīng)關(guān)系,提供了一個官方的版本對應(yīng)表,并給出了個人的一些經(jīng)驗總結(jié)2024-12-12
解決"XML Parser Error on line 1: 前言中不允許有內(nèi)容"錯誤
解決用windows自帶的記事編輯xml文件后出現(xiàn) "XML Parser Error on line 1: 前言中不允許有內(nèi)容。"的錯誤2018-02-02
SpringBoot集成SwaggerUi以及啟動時遇到的錯誤
這篇文章主要介紹了SpringBoot集成SwaggerUi以及啟動時遇到的錯誤,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
SpringBoot集成Redis之配置、序列化與持久化方式
本文介紹了Redis的基本概念、常用數(shù)據(jù)類型及操作、SpringBoot整合Redis的方法、高級特性與安全性、性能優(yōu)化、測試與部署、數(shù)據(jù)一致性及版本更新等內(nèi)容,通過本文的學(xué)習(xí),讀者可以掌握Redis的使用方法,并在實際項目中發(fā)揮其優(yōu)勢2024-11-11

