您的位置:首页 > 其它

url中文转码

2014-01-10 00:00 155 查看
摘要: 转自网络

调用接口参数含有中文字符,调用出错。谷歌百度了半天关于IOS转码的,都没有效果。

后来在官方文档找到了解决方法:

CFURLCreateStringByAddingPercentEscapes

Discussion
The characters escaped are all characters that are not legal URL characters (based on RFC 3986), plus any characters inlegalURLCharactersToBeEscaped, less any characters in charactersToLeaveUnescaped. To simply correct any non-URL characters in an otherwise correct URL string, pass
NULL
for the allocator, charactersToLeaveEscaped, and legalURLCharactersToBeEscaped parameters, and
kCFStringEncodingUTF8
as the encoding parameter.

It may be difficult to use this function to "clean up" unescaped or partially escaped URL strings where sequences are unpredictable and you cannot specify charactersToLeaveUnescaped. Instead, you can "pre-process" a URL string using CFURLCreateStringByReplacingPercentEscapesUsingEncodingthen add the escape characters using CFURLCreateStringByAddingPercentEscapes, as shown in the following code fragment.

CFStringRef originalURLString = CFSTR("http://online.store.com/storefront/?request=get-document&doi=10.1175%2F1520-0426(2005)014%3C1157:DODADSS%3E2.0.CO%3B2");
CFStringRef preprocessedString =
CFURLCreateStringByReplacingPercentEscapesUsingEncoding(kCFAllocatorDefault, originalURLString, CFSTR(""), kCFStringEncodingUTF8);
CFStringRef urlString =
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, preprocessedString, NULL, NULL, kCFStringEncodingUTF8);
url = CFURLCreateWithString(kCFAllocatorDefault, urlString, NULL);
英文我不是很懂,不过凭着直觉就是它了。拿过来处理一下:

[plain] view plaincopy

NSString *urlString = @"http://test.com/root?&city=中国";

//把NSString 转 CFStringRef

CFStringRef originalURLString = (__bridge CFStringRef)urlString;

CFStringRef preprocessedString =

CFURLCreateStringByReplacingPercentEsc
3ff0
apesUsingEncoding(kCFAllocatorDefault, originalURLString, CFSTR(""), kCFStringEncodingUTF8);

CFStringRef urlString1 =

CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, preprocessedString, NULL, NULL, kCFStringEncodingUTF8);

CFURLRef url = CFURLCreateWithString(kCFAllocatorDefault, urlString1, NULL);

//CFStringRef 转 NSString

urlString = (__bridge NSString*) url;

//转换后,发现并非NSString 而是NSURL 这很奇怪 所以再转一次

if ([urlString isKindOfClass:[NSURL class]]) {

NSURL *url2 = (__bridge NSURL*) url;;

urlString = [url2 absoluteString];

}

NSLog(@"nsstring:%@",urlString);

大概就这样。搞定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: