(1) 因為url支持26個英文字母缀棍、數(shù)字和少數(shù)幾個特殊字符爬范,因此,對于url中包含非標準url的字符時(比如有漢字時)璧亮,就需要對其進行編碼。iOS中提供了函數(shù)stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字符進行編碼群扶,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善穷当,對一些較為特殊的字符無效馁菜。而對這些字符則可以使用CFURLCreateStringByteAddingPercentEscapes函數(shù)汪疮,
1 NSString *str = [NSString stringWithUTF8String:surl.c_str()]; 2 str = @”http://218.21.213.10/MobileOA/TIFF/鄂安辦發(fā)45號關于下達2012年全市安全生產(chǎn)相對控制指標的通知1.jpg”; 3 str = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
(2) stringByAddingPercentEscapesUsingEncoding用與將Unicode字符轉(zhuǎn)換成有百分號的形式智嚷。 stringByReplacingPercentEscapesUsingEncoding:將百分號形式轉(zhuǎn)換成Unicode形式 例子: NSString *rawText = @”O(jiān)ne Broadway, Cambridge, MA”; NSString *encodedText = [rawText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@”Encoded text: %@”, encodedText); NSString decodedText = [encodedText stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@”O(jiān)riginal text: %@”, decodedText); 輸出: Encoded text: One%20Broadway,%20Cambridge,%20MA
Original text: One Broadway, Cambridge, MA ********************************************* stringByAddingPercentEscapesUsingEncoding對中文和一些特殊字符進行編碼,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善猜嘱,對一些像& /等特殊的字符無效朗伶。而對這些字符則可以使用CFURLCreateStringByteAddingPercentEscapes函數(shù)论皆, 例子: // Encode a string to embed in an URL. NSString encodeToPercentEscapeString(NSString string) { return (NSString ) CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef) string, NULL, (CFStringRef) @”!’();:@&=+$,/?%#[]”, kCFStringEncodingUTF8); }
// Decode a percent escape encoded string. NSString decodeFromPercentEscapeString(NSString *string) { return (NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef) string, CFSTR(“”), kCFStringEncodingUTF8); }
int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *rawText = @”Bed Bath & Beyond - URL=http://www.bedbathandbeyond.com/“;
NSString *encodedText = encodeToPercentEscapeString(rawText); NSLog(@”Encoded text: %@”, encodedText); NSString *decodedText = decodeFromPercentEscapeString(encodedText); NSLog(@”O(jiān)riginal text: %@”, decodedText);
[pool drain]; return 0; }