如何编码或在Objective-C解码网址(How to encode or decode URL

2019-09-17 16:01发布

有什么样

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

我想我的编码能够网址编码,包括日语等。

所以我想编码包含沿%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 *测试= @ “汉字马拉松是”; 的NSString *编码= [试验stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; PO(编码); PO(试验); PO(编码);

按预期工作。

Answer 1:

这是自然的,中国和日本的字符不ASCII字符串编码工作。 如果试图通过苹果的方法来逃避字符串,你一定要避免重复代码,存储结果为Unicode字符串。 使用下面的编码之一:

NSUTF8StringEncoding
NSUTF16StringEncoding
NSShiftJISStringEncoding (not Unicode, Japanese-specific)


Answer 2:

你可能想看看在stringByAddingPercentEscapesUsingEncodingstringByReplacingPercentEscapesUsingEncoding方法。

编码的例子(使用ASCII):

NSString* encodedString =
[originalString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

解码示例(使用ASCII):

NSString* originalString =
[encodedString stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

编辑:如果这没有得到期望的结果尝试更换NSASCIIStringEncodingNSUTF8StringEncoding

你可能也想尝试上述方法的变种:

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

这将工作在某些情况下更好



文章来源: How to encode or decode URL in objective-c