標籤:
NSString轉NSURL失敗的解決辦法
url支援26個英文字母、數字和少數幾個特殊字元,因此,對於url中包含非標準url的字元時,就需要對其進行編碼。iOS中提供了函數stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字元(下面已證實包含"%")進行編碼,但是stringByAddingPercentEscapesUsingEncoding的功能並不完善,對一些較為特殊的字元無效,或者說對一些我不想編碼的字元編碼,而對這些字元則可以使用CFURLCreateStringByteAddingPercentEscapes函數.
我在之前一直都使用NSString的stringByAddingPercentEscapesUsingEncoding方法,究其原因可能是用起來簡單吧,可以很容易的將url中的中文進行編碼,是很有用的一個方法,但是在一次使用過程中卻出現了問題,看下面的代碼
NSString *urlStr [email protected]"http://7xoztu.media1.z0.glb.clouddn.com/%E7%8C%9C%E7%8C%9C%E6%88%91%E6%9C%89%E5%A4%9Aai%E4%BD%A0%20-%20%E9%93%83%E5%A3%B0.mp3";
NSString *url = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
但是當urlStr中存在字元"%"時,使用上面的方法,會預設也進行"%"的編碼,於是就造成了訪問錯誤.
最後查資料,對一些特定的字串進行處理時應該換一種方法CFURLCreateStringByAddingPercentEscapes,參數含義如下面的
CFStringRef CFURLCreateStringByAddingPercentEscapes(
CFAllocatorRef allocator,
CFStringRef originalString, /*待轉碼的字串*/
CFStringRef charactersToLeaveUnescaped, /*指示不轉義的字元*/
CFStringRef legalURLCharactersToBeEscaped,/*指示確定轉義的字元*/
CFStringEncoding encoding); /*編碼類別型*/
如果同樣需要對上面的urlStr進行編碼,但是指定字元"%"不處理,對了,這個方法預設也是對字元"%"進行編碼的,使用方法參考下面的
NSString *url = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)(urlStr), (CFStringRef)@"%", NULL, kCFStringEncodingUTF8));
便能夠得到正確的url
NSString轉NSURL失敗的解決辦法