是否有像
这样的东西+(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(编码);
按预期工作。
答案 0 :(得分:4)
您可能想要查看stringByAddingPercentEscapesUsingEncoding
和stringByReplacingPercentEscapesUsingEncoding
方法。
编码示例(使用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)