Процентные значения, которые вы указали в качестве примера, являются кодовыми точками 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, что, вероятно, не то, что вам нужно), но приведенный выше код должен по крайней мере помочь вам.