如何在objective-c中编码或解码URL

时间:2012-05-31 17:53:45

标签: urlencode urldecode

是否有像

这样的东西
+(NSString *) URLencode: (NSString *) someString


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

如果是,如何实施呢?

向downvoters注意。这不是一个简单的问题。我需要能够全面完成这项工作的东西。例如:

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编码

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

http://mobiledevelopertips.com/networking/a-better-url-encoding-method.html

中有两种不同的方法

没有一个是好的。

我需要能够编码所有字符串,包括日文/中文字符。

更新:我跟着H2CO3回答并执行此操作:     NSString * test = @“汉字马拉松是”;     NSString * encoded = [test stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];     PO(编码);     PO(试验);     PO(编码);

按预期工作。

2 个答案:

答案 0 :(得分:4)

您可能想要查看stringByAddingPercentEscapesUsingEncodingstringByReplacingPercentEscapesUsingEncoding方法。

编码示例(使用ASCII):

NSString* encodedString =
[originalString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

解码示例(使用ASCII):

NSString* originalString =
[encodedString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

编辑: 如果这不能产生预期效果,请尝试将NSASCIIStringEncoding替换为NSUTF8StringEncoding

您也可以尝试上述方法的变体:

NSString * encodedString =
  (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL,
    (CFStringRef)originalString,
    NULL,
    (CFStringRef)@"!*'();:@&=+$,/?%#[]",
    kCFStringEncodingUTF8 );

在某些情况下哪种情况会更好

答案 1 :(得分:1)

中文和日文字符不能与ASCII字符串编码一起使用。如果你试图通过Apple的方法来逃避字符串,你肯定应该避免代码重复,将结果存储为Unicode字符串。使用以下编码之一:

NSUTF8StringEncoding
NSUTF16StringEncoding
NSShiftJISStringEncoding (not Unicode, Japanese-specific)