1. 程式人生 > >Android URL中關於中文特殊字元的編碼

Android URL中關於中文特殊字元的編碼

http://fengchj.com/?p=1940

還有一個文章“陳年老坑之 URL Encoding”也是這方面的文章:https://blog.jamespan.me/2015/05/17/url-encoding

URL中的空格有時候被編碼成%20,有時候被編碼成加號+,曾經迷糊過一段時間,後來查了下資料才搞明白。

一個URL的基本組成部分包括協議(scheme),域名,埠號,路徑和查詢字串(路徑引數和錨點標記就暫不考慮了)。路徑和查詢字串之間用問號?分離。例如http://www.example.com/index?param=1,路徑為index,查詢字串(Query String)為param=1。URL中關於空格的編碼正是與空格所在位置相關:空格被編碼成加號+的情況

會在查詢字串部分出現,而被編碼成%20則可以出現在路徑和查詢字串中。

造成這種混亂局面的原因在於:W3C標準規定,當Content-Type為application/x-www-form-urlencoded時,URL中查詢引數名和引數值中空格要用加號+替代,所以幾乎所有使用該規範的瀏覽器在表單提交後,URL查詢引數中空格都會被編成加號+。而在另一份規範(RFC 2396,定義URI)裡, URI裡的保留字元都需轉義成%HH格式(Section 3.4 Query Component),因此空格會被編碼成%20,加號+本身也作為保留字而被編成%2B,對於某些遵循RFC 2396標準的應用來說,它可能不接受查詢字串中出現加號+,認為它是非法字元。所以一個安全的舉措是URL中統一使用%20來編碼空格字元。

Java中的URLEncoder本意是用來把字串編碼成application/x-www-form-urlencoded MIME格式字串,也就是說僅僅適用於URL中的查詢字串部分,但是URLEncoder經常被用來對URL的其他部分編碼,它的encode方法會把空格編成加號+,與之對應的是,URLDecoder的decode方法會把加號+和%20都解碼為空格,這種違反直覺的做法造成了當初我對空格URL編碼問題的困擾。因此後來我的做法都是,在呼叫URLEncoder.encode對URL進行編碼後(所有加號+已被編碼成%2B),再呼叫replaceAll("\\+", "%20"),將所有加號+替換為%20。

相關推薦

android 網路請求url特殊字元解決方法

經常在get網路請求中有特殊字元,系統編碼 自動轉譯這些特殊字元有些字元在URL中具有特殊含義,基本編碼規則如下:特殊含義 十六進位制值1.+ 表示空格(在 URL 中不能使用空格) %202./ 分隔目錄和子目錄 %2F3.? 分隔實際的 URL 和引數 %3F4.% 指定

url特殊字元問題

在 使用url進行引數傳遞時,經常會傳遞一些中文名(或含有特殊字元)的引數或URL地址,在後臺處理時會發生轉換錯誤。在有些傳遞頁面使用GB2312, 而在接收頁面使用UTF8,這樣接收到的引數就可能會與原來發生不一致。使用伺服器端的urlEncode函式編碼的URL,與使用客

java處理url特殊字元%等

java處理url中的特殊字元(如&,%...) URL(Uniform Resoure Locator,統一資源定位器)是Internet中對資源進行統一定位和管理的標誌。一個完整的URL包括如下內容:1.       &

URL特殊字元意思

在URL中,我們會遇到很多的特殊字元,不懂的新手可能不懂得是什麼意思,為此寫在此,希望對不懂的人有所幫助! 符號                   意思        

javascript處理url特殊字元的情況如“{、#、}...”

JavaScript中有三個可以對字串編碼的函式, 分別是: escape(),encodeURI(),encodeURIComponent(), 相應3個解碼函式: unescape(),decodeURI(),decodeURIComponent() 。 下面

postman URL特殊字元傳參

URL出現了有+,空格,/,?,%,#,&,=等特殊符號的時候,可能在伺服器端無法獲得正確的引數值,此時需要對字元進行轉譯。 字元 - URL編碼值 空格 - %20 "      - %22 #     - %23 %    - %25 &    - %

JAVA如何處理URL特殊字元

方法1: String str="http://www.baidu.com/api/?action=s2s_install&a={appsunion}&b=3&c=30029

URL特殊字元問題escape,encodeURI,encodeURIComponent

在使用url進行引數傳遞時,經常會傳遞一些中文名(或含有特殊字元)的引數或URL地址,在後臺處理時會發生轉換錯誤。在有些傳遞頁面使用GB2312,而在接收頁面使用UTF8,這樣接收到的引數就可能會與原來發生不一致。使用伺服器端的urlEncode函式編碼的URL,與使用客戶端javascript的e

JSURL特殊字元問題:escape,encodeURI,encodeURIComponent

URI 編碼方法 Global 物件的 encodeURI()和encodeURIComponent()方法可以對URI(Uniform ResourceIdentifiers,通用資源識別符號)進行編碼,以便傳送給瀏覽器。有效的URI中不能包含某些字元,例如空格。而這兩

url傳值特殊字元編碼

為什麼需要Url編碼 通常如果一樣東西需要編碼,說明這樣東西並不適合傳輸。原因多種多樣,如Size過大,包含隱私資料,對於Url來說,之所以要進行編碼,是因為Url中有些字元會引起歧義。 Url編碼的原則就是使用安全的字元(沒有特殊用途或者特殊意義的可列印字元)去表

url包含特殊字元處理

encodeURIComponent(URIstring) :假定其引數是URI一部分(比如協議、主機名、路徑或查詢字串),因此 encodeURIComponent() 函式將轉義用於分隔 URI 各個部分的標點符號(? # 等)。

js過濾url特殊字元

在URL傳遞引數中,有一些特殊字元,而這些些符號在URL中是不能直接傳遞的,如果要在URL中傳遞這些特殊符號,那麼就要使用他們的編碼了。 下表中列出了一些URL特殊符號及編碼十六進位制值 1. + URL 中+號表示空格 %2B 2. 空格 URL中的空格可以用+號或者

tomcat配置允url帶有特殊字元

 根據rfc規範,url中不允許有 |,{,}等特殊字元,但在實際生產中還是有些url有可能攜帶有這些字元,特別是|還是較為常見的。在tomcat升級到7以後,對url字元的檢查都變嚴格了,如果出現這類字元,tomcat將直接返回400狀態碼。     後來有人對此提出了異

Android URL關於中文特殊字元編碼

http://fengchj.com/?p=1940 還有一個文章“陳年老坑之 URL Encoding”也是這方面的文章:https://blog.jamespan.me/2015/05/17/url-encoding URL中的空格有時候被編碼成%20,有時候被

JS 和 Java URL特殊字元編碼方式

 JavaScript   1.  編碼 escape(String)     其中某些字元被替換成了十六進位制的轉義序列。    解碼 unescape(String)     該函式的工作原理是這樣的:通過找到形式為 %xx 和 %uxxxx 的字元序列(x

TomcatURL對於特殊字元編碼問題

URL中有特殊字元如大括號{},^等tomcat會返回400錯誤 java.lang.IllegalArgumentException: Invalid character found in the

android檔案下載)下載連結包含特殊字元--空格,中文等,導致無法識別處理方案

今天在app測試時出現標題所示錯誤,導致無法正常重server端下載檔案; 通過檢視日誌,瞭解到是由於下載連結中出現空格、中文等特殊字元,導致連線地址不合法; 在網上也查看了很多描述相關問題解決方案的帖子,很有啟發-- 但是考慮到方便自己和大家,還是把問題和解決方案貼出來

我的Android進階之旅------>android一些特殊字元(如:←↑→↓等箭頭符號)的Unicode碼值

        在專案中,有時候在一些控制元件(如Button、TextView)中要新增一些符號,如下圖所示:                        這個時候可以使用圖片的方式來顯示,不過這些

URLEncoder和URLDecoder;cookie儲存特殊字元以及URL亂碼問題解決方案

cookie的特殊字元的編碼和解碼來解決亂碼問題;   編碼: protected void doGet(HttpServletRequest request, HttpServletRespo

string.xml特殊字元編碼

專案中要在string.xml 中顯示特殊符號,考慮使用ASCII碼進行顯示:  空格:&#160; 換行:\n 英文引號:\" 以下為常見的ASCII十進位制交換編碼: &#032;--> <-- 是空格 &#033;-->!&