3

有没有类似的东西

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


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

如果是,如何实施?

向下投票者请注意。这不是一个简单的问题。我需要能够全面做到这一点的东西。例如:

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 * 编码 = [测试 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; PO(编码);采购订单(测试);PO(编码);

按预期工作。

4

2 回答 2

4

您可能想看看stringByAddingPercentEscapesUsingEncodingandstringByReplacingPercentEscapesUsingEncoding方法。

编码示例(使用 ASCII):

NSString* encodedString =
[originalString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

解码示例(使用 ASCII):

NSString* originalString =
[encodedString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

编辑:如果这没有给出预期的结果,请尝试NSASCIIStringEncodingNSUTF8StringEncoding.

此外,您可能想尝试上述方法的变体:

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

在某些情况下会更好

于 2012-05-31T18:05:54.567 回答
1

中文和日文字符自然不适用于 ASCII 字符串编码。如果您尝试通过 Apple 的方法转义字符串,您绝对应该避免代码重复,将结果存储为 Unicode 字符串。使用以下编码之一:

NSUTF8StringEncoding
NSUTF16StringEncoding
NSShiftJISStringEncoding (not Unicode, Japanese-specific)
于 2012-06-05T04:07:11.997 回答