NSURLのエスケープ指定

in

clippyのエイリアスに日本語ファイル名を指定すると読み込めないというバグがありました。自分では滅多に日本語ファイル名などというのは使わないので全然ノーマーク。

NSString:stringWithContentsOfURL:encoding:errorを使って読み込みする際、読み込むファイルのNSURLを単純に生成してました。

NSString *contents = 
  [NSString stringWithContentsOfURL:[NSURL URLWithString:filename] 
  encoding:NSUTF8StringEncoding error:&err];

これだとNSURL:URLWithStringはnilを返しますが、なんのチェックもなしです。(^^ゞなんでもかでも一行に納めるとこういう場合がきつい。ちゃんと2ステップ踏んで、fileスキームもちゃんとエスケープしないとダメですね。

NSURL    *url = [NSURL URLWithString:
  [filename  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *contents = 
  [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&err];

便利なものがあって助かりました。しかし、どうせならエスケープするというのをデフォルトにすればいいのになぁ。などと少し思ったりもします。

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/347

返信