How to encode or decode URL in objective-c

蹲街弑〆低调 提交于 2019-12-11 03:54:25

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!