如何在Objective-C中编码或解码URL

如何在Objective-C中编码或解码URL

问题描述:

有没有类似的东西

+(NSString *) URLencode: (NSString *) someString


+(NSString *) URLdecode: (NSString *) someString

如果是,该如何实施?

请注意投票者.这不是一个简单的问题.我需要可以全面做到这一点的东西.例如:

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);

将产生以下内容:

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 汉字马拉松是

我希望我的编码能够对包括日语在内的所有内容进行URL编码.

I want my encoding to be able to URL encode EVERYTHING including japanese language, etc.

所以我想编码包含%E6%B1%89%E5%AD%97%E9%A9%AC%E6%8B%89%E6%9D%BE%E6%98%AF

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

http://mobiledevelopertips.com/中有2种不同的方法联网/a-better-url-encoding-method.html

没有一个人足够好.

我需要能够对所有字符串进行编码,包括日文/中文字符.

I need to be able to encode ALL strings, including japanese/chinese characters.

更新:我按照H2CO3的答案进行操作: NSString * test = @汉字马拉松是"; NSString *编码= [测试stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; PO(已编码); PO(测试); PO(已编码);

Update: I followed H2CO3 answer and do this: NSString * test = @"汉字马拉松是"; NSString * encoded = [test stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; PO(encoded); PO(test); PO(encoded);

按预期工作.

中文和日文字符与ASCII字符串编码不兼容是很自然的.如果您尝试通过Apple的方法对字符串进行转义(绝对应该避免代码重复),则将结果存储为Unicode字符串.使用以下编码之一:

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)