0

我一直在使用 NSURL 进行简单的 URL 验证,主要是为了清除我在特定应用程序中不想要的非 ascii 特殊字符。我将一个 URL 作为 NSString 的输入,然后尝试使用 URLWithString 创建一个 NSURL。如果返回 nil,则应用程序会显示错误消息。

例如,如果我输入“あか”作为输入(即两个日文字符),则 NSURL 为 nil。这一直按预期工作。但是我最近注意到输入一个只包含一个非 ASCII 字符的字符串,NSURL 会处理它并返回一个 URL 编码的值。因此,如果我输入“あ”作为输入,则生成的 NSURL 不是零。absoluteString 值为“%E3%81%82”。

我想知道这是 NSURL 中的错误,还是我不理解的某种漏洞。

我正在使用 Xcode 3.2.5 和 iOS 4.2 SDK。

4

1 回答 1

3

我无法解释您在上面看到的行为,但是,如果您要做的只是确定 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");
}
于 2012-02-07T08:14:48.727 回答