博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中URL的解码和转义问题
阅读量:7222 次
发布时间:2019-06-29

本文共 1573 字,大约阅读时间需要 5 分钟。

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

NSString *_urlString = @"http://maps.googles.com/maps/api/geocode/json?address=南京&sensor=true";    
NSURL *_url = [NSURL URLWithString:_dataString];
NSMutableURLRequest *_request = [NSMutableURLRequest requestWithURL:_url];
我将url字符串转码一下,也不能识别。
转码方法一:    
NSString * _dataString = [[NSString alloc] initWithData:[_urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
转码方法二:    
NSString * _dataString=[NSString stringWithUTF8String:[_urlString UTF8String]];
这个问题其实是URL编码和解码问题。
IPHONE下可以使用stringByAddingPercentEscapesUsingEncoding来编码。    
_urlString=[_urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Address URL: %@",_urlString);
但是,在实际使用中,编码后的URL仍然可能会无效。因为URL的编码方式并不唯一。:Encode-Compare 和 URLEncoding
NSString* escapedURLString = [unescapedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
不同的编码方式下,有些字符不会被编码。
所以,客户端使用什么样的编码方式应该和的解码方式配对。
可以使用CFURLCreateStringByAddingPercentEscapes编码URL中参数部分后,再用前面stringByAddingPercentEscapesUsingEncoding编码,应该可以适应多数解码方式。
请求的URL中,还会有很多转义符,也需要处理。
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)yourtext, NULL, (CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);
附上一些常用的转义处理:
Javascript下:
转义字符: ‘\’
$转义为\$
XML下:
& —-> \&
< —-> &lt;
> —-> &gt;
‘ —-> &apos;
” —-> &quot;
SQL下(MS Access):
# —-> ##
! —-> !!
‘ —-> ”
在基于SOAP的HTTP服务请求时,经常需要将XML格式的请求信息转义。

转载于:https://www.cnblogs.com/kenshinobiy/p/4389464.html

你可能感兴趣的文章
UVa10131
查看>>
Kakfa揭秘 Day2 Kafka内核再揭秘
查看>>
jeecg入门操作—字典配置
查看>>
centos安装php5.6
查看>>
ios上取得设备唯一标志的解决方案
查看>>
iOS下日期的处理
查看>>
Java多线程总结(二)锁、线程池
查看>>
使用ThinkPHP实现生成缩略图及显示
查看>>
django中的请求与响应
查看>>
MySQ备份常见问题
查看>>
python学习第n天(bilibili学习日)002 异常处理面向对象编程
查看>>
求一个数的所有因子和
查看>>
cp指令
查看>>
centos7下NFS使用与配置
查看>>
zookeeper客户端使用第三方(Curator)封装的Api操作节点
查看>>
SDUT 第一个字符数组-保留字母
查看>>
Jenkins学习之——(3)将项目发送到tomcat
查看>>
postgres-xl故障恢复(一)
查看>>
JavaScript document对象
查看>>
xml selectnodes
查看>>