url支持26個英文字母、數字和少數幾個特殊字元,因此,對於url中包含非標準url的字元時,就需要對其進行編碼。iOS中提供了函數stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字元(下麵已證實包含"%")進行編碼,但是stringByAdding ...
url支持26個英文字母、數字和少數幾個特殊字元,因此,對於url中包含非標準url的字元時,就需要對其進行編碼。iOS中提供了函數stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字元(下麵已證實包含"%")進行編碼,但是stringByAddingPercentEscapesUsingEncoding的功能並不完善,對一些較為特殊的字元無效,或者說對一些我不想編碼的字元編碼,而對這些字元則可以使用CFURLCreateStringByteAddingPercentEscapes函數.
我在之前一直都使用NSString的stringByAddingPercentEscapesUsingEncoding方法,究其原因可能是用起來簡單吧,可以很容易的將url中的中文進行編碼,是很有用的一個方法,但是在一次使用過程中卻出現了問題,看下麵的代碼
NSString *urlStr =
@"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];
然後在友盟的分享操作中,將該音樂的url進行分享時出現訪問錯誤,最後發現當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,成功的做到分享了.
開發新手,這隻是我遇到的一個小細節,也可能很基礎讓各位大神不屑一顧,上面有什麼不對的地方,或者是可以補充的,很樂意能給我個學習的機會,嘿嘿....