前两天处理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=没有转码,这都是可能的,还需变通,不可照搬。

iOS的URL处理的更多相关文章

  1. iOS根据Url 获取图片尺寸

    iOS根据Url 获取图片尺寸 // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([i ...

  2. iOS 自定义 URL Scheme 完全指南

    http://www.cocoachina.com/industry/20140522/8514.html “”   阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:<T ...

  3. iOS中URL的解码和转义问题

    在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别.NSString *_urlS ...

  4. iOS 根据url生成二维码贴到底图上

    根据url 生成指定尺寸的二维码图片 UIImage * createBinaryCodeImg(const char * url ,CGFloat size) { //create binary c ...

  5. iOS:URL Scheme(完结)(18-1-3更)

    1.APP跳转 2.APP功能跳转 3.系统功能跳转 1.APP跳转 1.被打开方 设置APP的URL Types(设置位置在 “项目 - TARGETS - APP icon - info - (拉 ...

  6. ios 自定义URL Scheme 设计

    在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

  7. iOS 禁用`URL Scheme`和`Universal Link`(通用链接)

    为什么要禁用URL Scheme和Universal Link(通用链接) 通常我们APP中都会嵌套一些web页面,有时我们的web页面会被DNS劫持从而跳转到其他APP中:或者是某些APP的Univ ...

  8. iOS 的url中含有中文解决方法

    [NSURLURLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题. 方法1: NSString* en ...

  9. iOS UIWebView URL拦截

    http://www.cocoachina.com/ios/20150626/12161.html 本文译者:candeladiao,原文:URL filtering for UIWebView on ...

随机推荐

  1. (五)socket实践编程

    1.服务器端程序编写 (1)socket(2)bind(3)listen(4)accept,返回值是一个fd,accept正确返回就表示我们已经和前来连接我的客户端之间建立了一个TCP连接了,以后我们 ...

  2. HBase之show table

    import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import or ...

  3. 超越线程池:Java并发并没有你想的那么糟糕

    转载: 超越线程池:Java并发并没有你想的那么糟糕

  4. js 原生对象排序

    //对象属性排序 function compare(propertyName) { return function (object1, object2) { var value1 = object1[ ...

  5. linux驱动初探之字符驱动

    关键字:字符驱动.动态生成设备节点.helloworld linux驱动编程,个人觉得第一件事就是配置好平台文件,这里以字符设备,也就是传说中的helloworld为例~ 此驱动程序基于linux3. ...

  6. Linux下I/O模型

    Unix下共有五种I/O模型 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用(select和poll) 4. 信号驱动式I/O(SIGIO) 5. 异步I/O(POSIX的aio_系列函数 ...

  7. 并发编程 19—— 显式的Conditon 对象

    Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...

  8. guava学习--集合2&Range

    转载:http://www.cnblogs.com/peida/p/Guava_ImmutableCollections.html Table: 当我们需要多个索引的数据结构的时候,通常情况下,我们只 ...

  9. java selenium 题目二 如何处理Table

    如果操作Table.  例如我有一个table.  table 的列的顺序是会变化的, 行数也是会变化的. 问题: 如果通过名字获取到年龄 HTML 源代码 <html> <body ...

  10. myeclipse启动tomcat会出现 a java exception has occured错误 的解决方法

    在浏览器中可以打开tomcat,结果在myeclipse启动tomcat会出现 a java exception has occured错误 ,之后出现一个Classloader.class的文件,关 ...