您作为示例给出的百分比转义是 Unicode 代码点。这种类型的编码是非标准的,所以我认为不太可能已经存在可以做到这一点的方法。您可能必须自己动手,但这并不太难。
在标题(可能称为NSString+NonStandardPercentEscapes.h
)中放入以下内容:
#import <Foundation/Foundation.h>
@interface NSString (NonStandardPercentEscapes)
- (NSString *) stringByAddingNonStandardPercentEscapes;
@end
并且,在源文件(可能称为NSString+NonStandardPercentEscapes.m
)中放入以下内容:
#import "NSString+NonStandardPercentEscapes.h"
@implementation NSString (NonStandardPercentEscapes)
- (NSString *) stringByAddingNonStandardPercentEscapes
{
NSCharacterSet *mustEscape = [NSCharacterSet characterSetWithCharactersInString:@"<>~\"{}|\\-`^% "];
NSMutableString *result = [[NSMutableString alloc] init];
NSUInteger length = [self length];
unichar buffer[length];
[self getCharacters:buffer range:NSMakeRange(0, length)];
for (NSUInteger i = 0; i < length; i++)
{
if ([mustEscape characterIsMember:buffer[i]])
[result appendFormat:@"%%%02hhx", buffer[i]];
else if (buffer[i] > 0xFF)
[result appendFormat:@"%%u%04hx", buffer[i]];
else if (!isascii((int)buffer[i]))
[result appendFormat:@"%%%02hhx", buffer[i]];
else
[result appendFormat:@"%c", buffer[i]];
}
// return the mutable version, nobody will know unless they check the class
return [result autorelease];
// alternatively, you can force the result to be immutable
NSString *immutable = [[result copy] autorelease];
[result release];
return immutable;
}
@end
然后,无论您需要对希伯来语字符串进行编码,您都可以执行以下操作(只要您的源文件包含上述标头):
NSString * urlS = @"http://irrelevanttoyourinterests/some.aspx?foo=bar&this=that&Text=תל אביב";
urlS = [urlS stringByAddingNonStandardPercentEscapes];
NSUrl *url1 = [NSURL URLWithString:urlS];
免责声明:
我不知道需要转义哪些字符以及应该在什么时候开始转义(这只是对整个 URL 进行编码,这可能不是你想要的),但上面的代码至少应该让你开始。