NSURL не возвращает nil для односимвольных строк не ascii - PullRequest
0 голосов
/ 07 февраля 2012

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

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

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

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

1 Ответ

3 голосов
/ 07 февраля 2012

Я не могу объяснить поведение, которое вы видите выше, однако, если все, что вы пытаетесь сделать, это определить, содержит ли строка 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");
}
...