NSString轉NSURL失敗的解決辦法

來源:互聯網
上載者:User

標籤:

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失敗的解決辦法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.