1. 程式人生 > >get請求時候引數中含有“中文”欄位出現亂碼問題的原因和解決方法

get請求時候引數中含有“中文”欄位出現亂碼問題的原因和解決方法

關於使用get請求時候,在傳遞的引數中有中文字元時候出現亂碼問題的原因
1.伺服器:伺服器按照預設的iso-8859-1進行解碼。
A、post方式
post方式屬於表單提交,引數存在於請求體中,只需要如下配置即可。
request.setCharacterEncoding("utf-8”)
B、get方式
get方式提交的引數會跟在請求行中的uri後邊,伺服器按照預設的iso-8859-1進行解碼;

解決的方法(一般選第一種):
1.客戶端對引數進行兩次EncodeURI.encode操作

原理:

如果只進行一次encodeURI,得到的是UTF-8形式的URL,伺服器端通過request.getParameter()解碼查詢引數(通常是iso-8859-1)就會得到亂碼(伺服器按照預設的iso-8859-1進行解碼)。

進行兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上和第一次進行一次UTF-8編碼(此時全部轉換為ASCII字元,沒有多位元組字元了),第二次進行一次iso-8859-1編碼是一樣的.

因為對英文字元來說, UTF-8編碼和ISO-8859-1編碼的結果相同。在伺服器端,

首先通過request.getParameter()自動進行第一次解碼(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,對結果無影響)得到Ascii字元,然後再使用UTF-8進行第二次解碼,通常使用java.net.URLDecoder.decode("","UTF-8")方法。


2.服務端將解碼格式直接配置為utf-8,那麼客戶端只要進行一次編碼就好

相關推薦

get請求時候引數含有中文出現亂碼問題的原因解決方法

關於使用get請求時候,在傳遞的引數中有中文字元時候出現亂碼問題的原因 1.伺服器:伺服器按照預設的iso-8859-1進行解碼。 A、post方式 post方式屬於表單提交,引數存在於請求體中,只需要如下配置即可。 request.setCharacterEncoding

Get請求引數中文,程式碼報錯解決方式

String url="http://portal.dsjhs.com/apis/HsCdis/get/getLoginName?

使用httpclient下載圖片時,url含有中文字元,導致下載失敗的解決方法

先說解決方法吧: 修改tomcat的server.xml檔案,在Connector標籤中加上URLEncoding引數 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThre

關於網站開發div標簽設置寬度後其中文本溢出的原因解決方法

lan 解析 info tro 情況 href targe 圖片 com 一.問題產生的原因   當我們為div標簽聲明了寬度,但是仍然會出現文本越界的情況,不知道大家有沒有發現,只有文本內容為單詞或者純數字 的時候才會出現這種情況為此我特意測試了兩種情況,結果如下:

C#關於從剪貼簿讀取HTML格式含中文字元會出現的問題解決方法

通過如下程式碼在剪貼簿中獲取含HTML格式的文字時發現當內容出現漢字的時候會有亂碼 if (Clipboard.ContainsText(TextDataFormat.Html)) textBox1.T

Linux使用Shell指令碼插入mysql資料庫中文亂碼問題

問題描述 我在shell指令碼寫了一段insert到mysql的語句,測試語句如下: mysql -h*** -P3306 -u*** -p*** -D *** -e "insert into test values('123456', '測試')"

sqlserver查詢資料庫包含某個的所有表所有儲存過程

  1、查詢包含某欄位的所有表 1 2 3 4 5 6 select object_name(id) objName,Name as colName from syscolumns where 

更改oracle資料庫某個表的某個的資料型別長度

不廢話需求:在plsql中更改oracle資料庫中的info_agency表中的county欄位的資料型別 為varchar 長度為255實現:alter TABLE INFO_AGENCY MODIFY (county VARCHAR(255));親用 則 可用

Hive分割槽表 新增新,值為NULL 問題解決

1. 如果當前Hive表不帶有分割槽,那麼可以直接使用alter table 表名 add columns(欄位名 string) 2.如果當前HIve錶帶有分割槽的,那麼可以使用 alter table 表名 partition(分割槽名='分割槽對應的值') add

ssh關於含有外鍵的傳值無法識別正確的action的原因解決辦法

ces pub ets err ntc 執行函數 success 引入 dst 在含有外鍵的表中,要保存一個值到這個外鍵時:邏輯思路:需要先將jsp頁面的值傳到相應的action中,在這個action中需要引入這個外鍵的實體層和DAO層(DAO層只需set方法),在執行函數

mybatis返回map型別資料空值不顯示(三種解決方法)

一、查詢sql新增每個欄位的判斷空 IFNULL(rate,'') as rate11 二、ResultType利用實體返回,不用map 三、springMVC+mybatis查詢資料,返回resultType=”map”時,如果資料為空的欄位,則該欄位省略不顯示,可以

oracle通過DBLink訪問遠端資料庫的LOB報ORA-22992的解決方法

oracle通過DBLink訪問遠端資料庫的LOB欄位報ORA-22992的解決方法 最近在做資料庫遷移,從一個數據庫匯入表到另外一個數據庫,同時為了更換表空間,在匯入的過程中出現包含BLOB型別的表不能匯入,(欄位是BLOB型別),如果本地資料庫直接通過select語

Js引數值含有單引號或雙引號問題的解決方法

<script type="text/javascript"> function Display(LoginEmail, UserName, ID) { alert(LoginEmail); } </script>   1.使

python 字典中文,寫入檔案變為編碼的解決方法

 字典中有中文,寫入檔案變為編碼的解決方法 #!/usr/bin/python # encoding:utf-8 import json def writeDict(data): wit

PHPExcel在高版本PHP7,Writer->save出現ERR_INVALID_RESPONSE錯誤的解決方法

問題 ans content head contex flow nbsp ext blog 這個Writer->save錯誤可能由於很多原因導致,其中有一部分是因為header和緩沖區的錯誤導致的 這部分具體討論可以看這裏http://stackoverflow.

spring專案新增@Transactional註解後出現NoSuchBeanDefinitionException異常的解決方法

配置檔案裡這一句<tx:annotation-driven transaction-manager="transactionManager"/> 改成 <tx:annotation-driven transaction-manager="transac

在同一個類,一個方法呼叫另外一個有註解(比如@Async,@Transational)的方法,註解失效的原因解決方法

在同一個類中,一個方法呼叫另外一個有註解(比如@Async,@Transational)的方法,註解是不會生效的。 比如,下面程式碼例子中,有兩方法,一個有@Transational註解,一個沒有。如果呼叫了有註解的addPerson()方法,會啟動一個Transaction;如果呼叫updatePerso

mysql5.5-中文亂碼原因解決方法

一、出現中文亂碼的原因 1.檢視字符集 mysql> show variables like ‘%char%’; ±-------------------------±-----------------------------------------

.Net通過DataSet直接更新資料庫相關問題解決方法

一般存在的問題: 1. 沒有acceptchange2. 資料庫中表沒有設定主鍵 解決方法: 使用DataAdapter的update方法更新資料,該資料表必須設定主鍵,那是因為這個方法的實現原理實際上只不過是根據表結構和主鍵自動生成SQL 也許你的資料表本身是有主鍵的,但是

javaDate date = new Date();不能使用,Date()不能寫無參的原因解決方法

如果遇到這種情況,其實原因很簡單,如果你是想獲取當前時間使用,報錯的原因是包引的import java.sql.Date; 只需要換成 import java.util.Date; 即可 通過Date類來獲取當前時間 : Date date = new Da