iOS中URL的解码和转义问题

iOS中URL的解码和转义问题

时间:2013-03-20 09:19来源:www.chengxuyuans.com

在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别。
NSString *_urlString = @"http://maps.googleapis.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格式的请求信息转义。

本文地址http://www.chengxuyuans.com/iPhone_IOS/53806.html

时间: 2024-11-11 08:27:33

iOS中URL的解码和转义问题的相关文章

密码中有特殊的字符IOS如何处理 IOS中URL包含中文参数的问题

由于url支持26个英文字母.数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码.iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效. NSString中如果包括中文字符的话转换为NSURL得到的值为nil,用stringByAddingPercentEsc

ASP.NET中Url编码解码

今天遇到Url编码解码的问题,纠结了一天的时间,结果上网一查才发现太二了我们. 同事写的代码把url用HttpUtility.UrlEncode编码和解码了,本地测试没有问题,部署到服务器上就提示转码失败,查看问题发现转码的时候把“+”转成了“%”,但是解码的时候把“%”装换成了“ ”空格,最后上网查了下很多网友都遇到过这种问题, 最后把HttpUtility.UrlEncode替换成了一下的方式就OK了. var email="15586757225"; string after =

PHP和javascript中url编码解码详解

在实际开发中,我们可能会遇到路径编码解码的问题,下面总结了一下: PHP中: 1.urlencode(编码),urldecode(解码) $a = urlencode('http://www.baidu.com?name=test&query=字母'); echo $a //http%3A%2F%2Fwww.baidu.com%3Fname%3Dtest%26query%3D%E5%AD%97%E6%AF%8D 2.rawurlencode.rawurldecode 这个函数跟上面的大部分一模一

iOS中url的特殊字符转换

URL特殊字符处理 一般来说我们调用webVIew的时候,只要给webVIew传一个url,在网页里面就可以显示网页信息.但是当我们传的url比较麻烦或者带文字符,带参数的时候我们需要对特殊字符进行转义.我们还可以用遍历,正则等来把特殊字符给替换掉!! 有两种方法: 一,使用NSString的方法: 1. //字符串加百分号转义使用编码 (这个方法会把参数里面的东西转义) NSString *str1 = [string stringByAddingPercentEscapesUsingEnco

关于ios中的转码问题

一,历史介绍(不了解的值得一读) 1)GB2312.GBK与UTF-8的区别 首先,我们要明白,GB2312.GBK和UTF-8都是一种字符编码,除此之外,还有好多字符编码.只是对于我们中国人的网站来说,用这三种编码 比较多.简单的说一下,为什么要用编码,在计算机内,储存文本信息用ASC II码,每一个字符对应着唯一的ASCII码.最初计算机是由美国发明的,他们也用的是键盘和上面的字母,所以他们的字符ASCII好解决.但是我们中国 的就不同了,每个汉字要对应唯一的ASCII码.这样,就出来了国家

iOS url 编码解码

1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 2.url解码 请求后,返回的数据,如何显示的是这样的格式:%3A%2F%2F,此时需要我们进行UTF-8解码,用到的方法是: NSString *str = [model.album_name str

【js与jquery】javascript中url编码与解码

本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数 编码/解码 escape / unescape, encodeURI / decodeURI, encodeURIComponent / decodeURIComponent. [js与jquery]javascript中url编码与解码,布布扣,bubuko.com

详解JavaScript中的Url编码/解码,表单提交中网址编码

本文主要针对URI编解码的相关问题做了介绍,对Url编码中哪些字符需要编码.为什么需要编码做了详细的说明,并对比分析了Javascript 中和 编解码相关的几对函数escape / unescape,encodeURI / decodeURI和 encodeURIComponent / decodeURIComponent. 预备知识 foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/ \_______

java中URL 的编码和解码函数

java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascript 中URL 的编码和解码函数escape(String s)和unescape(String s) ; 在前台:var url="test.jsp?param="+escape('this%is#te=st&o k?+/');在后台: String param=request.