1. 程式人生 > >iOS URL中含有中文和轉義字元時的處理

iOS URL中含有中文和轉義字元時的處理

今天發現一個蛋疼的問題,服務端返回的urlString裡面有時含有中文,使用

[NSURLURLWithString:urlString]生成URL物件時,iOS客戶端不能正確進行網路請求,網上找到的URLEncode方法又不能完全解決問題.

   方法1:

NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

   方法2:

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);

   這兩種方法當urlString裡含有中文時URL編碼是正確的,但是如果其中含有已轉義的%等符號時,又會再次轉義而導致錯誤.

   檢視方法2引數說明:

CFStringRefCFURLCreateStringByAddingPercentEscapes(CFAllocatorRefallocator, CFStringRef originalString, CFStringRefcharactersToLeaveUnescaped, CFStringReflegalURLCharactersToBeEscaped, CFStringEncoding encoding);

因此做出修改,寫出方法:

    NSString *encodedString = (NSString *)

    CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                            (CFStringRef)urlString,

                                            (CFStringRef)@"!$&'()*+,-./:;[email protected]_~%#[]",

                                            NULL

,

                                            kCFStringEncodingUTF8);

如果在所有的類裡都要用到這個方法,可以寫成category,然後在標頭檔案import "NSString+URL.h" 即可呼叫.

NSString+URL.h  檔案

  1. @interface NSString (URL)  
  2. - (NSString *)URLEncodedString;  
  3. @end  
NSString+URL.m  檔案
  1. #import "NSString+URL.h"
  2. @implementation NSString (URL)  
  3. - (NSString *)URLEncodedString  
  4. {  
  5.     NSString *encodedString = (NSString *)  
  6.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
  7.                                             (CFStringRef)self,  
  8.                                             (CFStringRef)@"!$&'()*+,-./:;[email protected]_~%#[]",  
  9.                                             NULL,  
  10.                                             kCFStringEncodingUTF8);  
  11.     return encodedString;  
  12. }  
  13. @end  

呼叫方法:

    NSString *encodedString = [urlString URLEncodedString];

    //encodedString do something

本文轉載自:http://blog.csdn.net/typingios/article/details/9136005

相關推薦

iOS URL含有中文轉義字元處理

今天發現一個蛋疼的問題,服務端返回的urlString裡面有時含有中文,使用 [NSURLURLWithString:urlString]生成URL物件時,iOS客戶端不能正確進行網路請求,網上找到的URLEncode方法又不能完全解決問題.    方法1: NSS

JAVA反射使用例項class.getResource()得到URL含有中文空格亂碼問題

JAVA反射使用例項 package invoke; import java.lang.reflect.Method; public class T1 {  public static void main(String[] args) throws Exception {

ios url含有中文問題

1 使用 stringByAddingPercentEncodingWithAllowedCharacters 例如:使用方法 NSURL *url = [NSURL URLWithString:[valueString stringByAddingPerc

ios-day21-01(對URL中文或特殊字元新增百分號轉義、把經過百分號轉義URL還原)

NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login.php?username=張三&password=1234"]; // 如果URL中包含中文字串或者特殊字元(例如空格),需要給URL新增百分號轉義

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

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

url含有中文路徑訪問出現404問題

pat find() 訪問 col pub 文字 str static color /** * URL中文字符編碼轉換 * @param url 含中文字符的URL * @return */ public static String getC

ios url中文的解決方案

蒐集資料整理後得出解決方法: 一,使用NSString的方法: NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //這個方法在

在js中文特殊字元轉碼,js轉碼(轉載)

js對文字進行編碼涉及3個函式:escape,encodeURI,encodeURIComponent,相應3個解碼函式:unescape,decodeURI,decodeURIComponent1、   傳遞引數時需要使用encodeURIComponent,這樣組合的url才不會被#等特殊字元截斷。   

SpringMVC @PathVariable 含有中文點號

Spring MVC從3.0開始支援REST,而主要就是通過@PathVariable來處理請求引數和路徑的對映。 由於考慮到SEO的緣故,很多人喜歡把新聞的名稱作為路徑中的一部分去處理,這時候中文的名稱就會遇到問題,沒辦法對映,這個是因為編碼問題,只要到 TOMCAT/

在js中文特殊字元轉碼,js轉碼

js對文字進行編碼涉及3個函式:escape,encodeURI,encodeURIComponent,相應3個解碼函式:unescape,decodeURI,decodeURIComponent1、   傳遞引數時需要使用encodeURIComponent,這樣組合的u

PHP URL包含中文,查看提示404

not pla 再次 ros index oca 參考 utf cnblogs 使用Microsoft Web Platform在IIS裏配置安裝一個wordpress,一切順利。 當添加一片文章時,自動生成URL類似如下: http://localhost/wordp

Android開發請求URL引數含有中文空格的解決方法

在做安卓應用時,碰到要處理URL請求的中文引數,我們需要用到URLEncoder.encode(引數,"utf-8")方法對中文引數進行編碼,這樣做,能夠解決大多數中文引數的亂碼問題,當然編碼方式不一定是“utf-8”,這取決於你伺服器端的編碼格式。 但是,若是請求引數中不

url 含有中文進行轉碼操作

www 勘誤 utili reason main letter ins 兩個 int 對 url 中含有的中文進行轉碼操作 一般情況下,將帶有中文的 url 拷貝到開發工具,開發工具都會有相應的轉碼(自動轉碼), 現在大部分的瀏覽器也可以對含有中文的 url 進行轉碼(自

URL的保留不安全字元

******************************************************************* 書寫URL時要使用US-ASCII字符集可以顯示的字元。 http://www.google.com 如果需要在URL中使用不屬於

PHP的單引號、雙引號轉義字元詳解

PHP單引號及雙引號均可以修飾字符串型別的資料,如果修飾的字串中含有變數(例$name);最大的區別是: 雙引號會替換變數的值,而單引號會把它當做字串輸出。 轉義字元,顧名思義會將規定的語法用"\"來輸出。但語法規定在不同的系統中轉義字元的作用不同,例如:windows下的回車換行符用"\r"或"

php的單引號、雙引號轉義字元

在PHP中,可以使用 echo() 和 print() 語句傳送資料到Web瀏覽器,也可以使用它們傳送HTML 程式碼到Web瀏覽器。從技術上講,echo() 和 print() 是語言構造,而不是函式,這裡用了一對括號,從而有助於與變數以及PHP的其他部分割槽分開。這兩個語句本質上沒有什麼區別,因此用那

java對URL含有的特殊字元"&"的處理

1、問題描述:最近在做java匯出檔案到excel專案中遇到請求的URL包含引數&的時候,匯出的檔案裡面內容為空,什麼都沒有。 2、問題排查:首先我檢視專案執行的日誌,發現打印出來的錯誤資訊是空指標異常java.lang.NullPointException.然後發

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

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

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

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

拼接url中文特殊字元

中文和特殊字元 蘋果自帶的方法是解不了的—–需要自己去控制,以下是程式碼 - (NSString *)encodeToPercentEscapeString: (NSString *)