0

私はNSURLを使用して、単純なURL検証を行ってきました。主に、特定のアプリケーションでは不要な非ASCII特殊文字を削除するためです。NSStringへの入力としてURLを取得し、URLWithStringを使用してNSURLを作成しようとします。これがnilを返す場合、アプリはエラーメッセージを表示します。

たとえば、入力として「あか」(つまり、2つの日本語文字)を入力すると、NSURLはnilになります。これは期待どおりに機能しています。ただし、最近、非ASCII文字を1つだけ含む文字列を入力すると、NSURLがそれを処理し、URLエンコードされた値を返すことに気付きました。したがって、入力として「あ」と入力すると、結果のNSURLはnilではありません。AbsoluteString値は"%E3%81%82"です。

これはNSURLのバグなのか、それとも私が理解していないある種の抜け穴なのか疑問に思います。

Xcode3.2.5とiOS4.2SDKを使用しています。

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 に答える