问题
Is there something like
+(NSString *) URLencode: (NSString *) someString
+(NSString *) URLdecode: (NSString *) someString
If so, how to implement it?
Note to downvoters. This is NOT a simple question. I need something that can comprehensively do this. For example:
NSString * test = @"汉字马拉松是";
NSString * encoded = [test stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
PO(encoded);
PO(test);
Will yield the following:
2012-06-04 16:04:22.709 BadgerNew[2266:17003] <0xcd890 GrabClass.m:(930)> encoded (null)
2012-06-04 16:04:22.710 BadgerNew[2266:17003] <0xcd890 GrabClass.m:(931)> test 汉字马拉松是
I want my encoding to be able to URL encode EVERYTHING including japanese language, etc.
So I want encoded to contain something along %E6%B1%89%E5%AD%97%E9%A9%AC%E6%8B%89%E6%9D%BE%E6%98%AF
There are 2 different methods in http://mobiledevelopertips.com/networking/a-better-url-encoding-method.html
None are good enough.
I need to be able to encode ALL strings, including japanese/chinese characters.
Update: I followed H2CO3 answer and do this: NSString * test = @"汉字马拉松是"; NSString * encoded = [test stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; PO(encoded); PO(test); PO(encoded);
Work as expected.
回答1:
It's natural that Chinese and Japanese characters don't work with ASCII string encoding. If you try to escape the string by Apple's methods, which you definitely should to avoid code duplication, store the result as a Unicode string. Use one of the following encodings:
NSUTF8StringEncoding
NSUTF16StringEncoding
NSShiftJISStringEncoding (not Unicode, Japanese-specific)
回答2:
You probably want to take a look at the stringByAddingPercentEscapesUsingEncoding
and stringByReplacingPercentEscapesUsingEncoding
methods.
Encoding example (using ASCII):
NSString* encodedString =
[originalString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
Decoding example (using ASCII):
NSString* originalString =
[encodedString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
EDIT:
If this doesn't give the desired results try replacing NSASCIIStringEncoding
with NSUTF8StringEncoding
.
Also you might want to try the variant of above methods :
NSString * encodedString =
(NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)originalString,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8 );
Which will work better in some cases
来源:https://stackoverflow.com/questions/10838702/how-to-encode-or-decode-url-in-objective-c