对于单字符非ascii字符串,NSURL不返回nil

时间:2012-02-07 02:31:23

标签: ios nsurl non-ascii-characters

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

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

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

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

1 个答案:

答案 0 :(得分: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");
}