NSURL не возвращает nil для односимвольных строк, отличных от ascii

Я использовал NSURL для простой проверки URL-адресов, в основном для отсеивания специальных символов, отличных от ascii, которые мне не нужны в моем конкретном приложении. Я беру URL-адрес в качестве входных данных в NSString, а затем пытаюсь создать NSURL с помощью URLWithString. Если это возвращает nil, приложение выдает сообщение об ошибке.

Например, если я ввожу «あ か» в качестве ввода (это два японских символа), тогда NSURL будет равен нулю. Это работает, как ожидалось. Однако недавно я заметил, что при вводе строки, содержащей только один символ, отличный от ASCII, NSURL обрабатывает ее и возвращает значение в кодировке URL. Поэтому, если я введу «あ» в качестве входных данных, результирующий NSURL НЕ будет равен нулю. Значение absoluteString - «% E3% 81% 82».

Мне интересно, ошибка ли это в NSURL или какая-то лазейка, которую я не понимаю.

Я использую Xcode 3.2.5 и iOS 4.2 SDK.


person mayonaise    schedule 07.02.2012    source источник
comment
Можете ли вы показать нам реальный код того, что вы делаете?   -  person Mike Abdullah    schedule 09.04.2013


Ответы (1)


Я не могу объяснить поведение, которое вы видите выше, однако, если все, что вы пытаетесь сделать, это определить, содержит ли строка URL-адреса какие-либо символы, отличные от ASCII, вы можете добиться этого с помощью следующего кода:

NSString *testURLString = @"http://www.googleあか.com";

NSCharacterSet* ascii = [NSCharacterSet characterSetWithRange: NSMakeRange(0, 128)];
NSCharacterSet* nonAscii = [ascii invertedSet];

if ([testURLString rangeOfCharacterFromSet:nonAscii].location != NSNotFound) {
    NSLog(@"This string contains non-ASCII characters");
}
person jonkroll    schedule 07.02.2012
comment
Спасибо за совет. Это работает, и я, вероятно, не подумал бы об этом, так как я новичок в разработке iOS. - person mayonaise; 08.02.2012