iOS的URL處理,iOSURL處理

來源:互聯網
上載者:User

iOS的URL處理,iOSURL處理

  前兩天處理iOSapp過程中(我是用swift語言寫的,資料較少),被一個“字串”搞了一晚上的時間到第二天才處理好,在此記下,望見過此文的學生有一天遇到該情況能三分鐘搞定不浪費時間:

先看如下代碼

func getBalance(){

        let url = NSURL(string: "http://www.weather.com.cn/data/sk/101110101.html")

        let data = NSData(contentsOfURL: url!)

        if data != nil {

            let dict: NSDictionary = (try! NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)) as! NSDictionary

            let weatherInfo = dict.objectForKey("weatherinfo") as! NSDictionary

            print("得到天氣資料了")

            var city = weatherInfo.objectForKey("city") as! String

            print("得到城市名稱了")

    ... ...

        }

    }

是不是覺得沒什麼,直接存取就可以了,沒錯,但是這隻是最基本的URL地址,要是我們的地址是這樣子的呢

http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson={"cardNo":"999000002111","pwd":"000211","name":"民生卡11"}&sign=123456789

會發現我們的字串裡有雙引號,參數有中文等特殊字元,這個時候,再直接存取會出現什麼情況?不對,是根本訪問不了,因為很顯然我們需要在let url = NSURL(string: "http://......")該字串裡進行轉義,用我們的斜杠/"但是轉了之後還是無法通過,Xcode會報錯:url is nil

 

因為我也是第一次接觸app開發,沒有OC經驗,不曉得是iOS原本就不識別/轉義還是swift不識別,畢竟新語言。

 

問題的解決是另一種“轉義”——編碼,將URL進行encode編碼一下就可以了,上面那段URL將雙引號和大括弧經過encode編碼如下:

http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=%7B%22cardNo%22:%22999000002111%22,%22pwd%22:%22pwd%22,%22name%22:%22民生卡11%22%7D&sign=123456789

這個時候不僅可以訪問,還可以加參數,如下:

http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=%7B%22cardNo%22:%22"+IDNumber+"%22,%22pwd%22:%22"+pwdNumber+"%22,%22name%22:%22"+Name+"%22%7D&sign=123456789

 

記住:

  一、有編碼就有解碼,不過解碼那是服務端的事情了,移動端開發人員要知道這件事情。

  二、上文只是提供一個思路,讓遇到URL問題的同學知道有encode編碼這件事,具體的轉碼還要看服務端的,有些服務端只提供一部分轉碼,如上文,只轉

{"cardNo":"999000002111","pwd":"000211","name":"民生卡11"},而http://183.252.21.19:81/bhys/d/api/?apiType=check&rqsJson=沒有轉碼,這都是可能的,還需變通,不可照搬。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.