最近技術的な話ばかりで、見てる人が減りそうなのですが…。 CocoaのNSURLというクラスがあるのですが、これで日本語の文字列を使って、 GETを投げたいとかなり前から悩んでいたのですが、やっと解決したのでここに記しておきます。 まぁ、Cocoaってのは、日本語を扱うときの基本は UTF-8 なんです。 なので、GETで渡す先のサイトがUTF-8に対応していないと、一旦Shift_JISなり EUCなりに変換して渡さなきゃならない。 でも、NSString クラスには一応文字変換の関数があるのですが、 変換するときは、NSString -> NSData 又は、 NSData -> NSString になってしまう。 まぁ、NSString は UTF-8 しか扱えないので、あたりまえなのですが…、こうだと NSURLを NSData から生成しなければならない。 でも NSData(GETで渡す値) と NSString(GETを飛ばすURL) を使って、NSURL のインスタンスを生成する方法がないようなのです…。 (もしかしてあるのかもしれないですがみつかりませんでした…) そこで苦節うんヶ月、NSString をそのまま 文字変換 + URI Escape して、 NSString に変換する方法がわかりました。 その方法とは、やはり Core Foundation にありました。 結論から言うと、 NSString *url, *encodedUrl; /* url に http://example.com/hoge.cgi?param=ホゲホゲ を入れて */ encodedUrl = (NSString *) CFURLCreateStringByAddingPercentEscapes (NULL, (CFStringRef) url, NULL, NULL, kCFStringEncodingMacJapanese); こうすれば、url がうまいこと URI Escape されて encodedUrl に入るという すんぽうである。すげぇ…。 ちなみに、CFURLCreateStringByAddingPercentEscapesの説明は、リンクを御覧下さい。 kCFStringEncodingMacJapanese ってのは、変換する元の言語を指定するようです。 これは、通常のシステムであれば、 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/Headers/CFStringEncodingExt.h の中に記述されているはずです。 これで、もうURL関係はなんでもありですな。ふぅ…。 ちなみに、User-Agent などを偽装する方法は、 [ handle writeProperty : @"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" forKey : @"User-Agent" ]; こんなかんじ。handle は NSURLHandle である。