iOS中URL的解码和转义问题
2014-06-26 18:07
369 查看
在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);//确保url字符串中含有!*’();:@&=+$,/?%#[]的时候,这些字符需要被转化,避免与语法发生冲突。
原文发表于http://blog.csdn.net/mikixiyou/article/details/8692699
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);//确保url字符串中含有!*’();:@&=+$,/?%#[]的时候,这些字符需要被转化,避免与语法发生冲突。
原文发表于http://blog.csdn.net/mikixiyou/article/details/8692699
相关文章推荐
- iOS中URL的解码和转义问题
- iOS中URL的解码和转义问题(百度同样要这样)
- iOS中URL的解码和转义问题
- iOS中URL的解码和转义问题
- iOS中URL的解码和转义问题
- IOS中url的编码,解码问题
- iOS---Url编解码的问题
- iOS中文文件名传输或url中存在汉字解决办法(urldecode解码的问题)
- JSP中js传递和解析URL参数以及中文转码和解码问题
- encodeURIComponent编码 URLDecoder.decode解码乱码的问题
- java中的URLEncoder和URLDecoder类处理编码与解码问题
- ios url 编码和解码
- iOS 中的 url 中文和特殊字符编码问题
- 那些解决了我问题的URL之ios&C#
- encodeURIComponent编码 URLDecoder.decode解码乱码的问题
- iOS中url中文编码问题
- url特殊字符转义问题
- [iOS]iOS 中的 url 编码问题
- encodeURIComponent编码 URLDecoder.decode解码乱码的问题
- iOS 中的 url 编码问题