日本語を含むパスを使う時の注意

毎回、ハマって調べて直しては忘れて…を繰り返す、日本語を含むパスの問題。
どういうことかというと、ユーザが指定したファイルを開くようなプログラムを作って、

/Users/foo/あいうえお.wav

のような日本語を含むファイルを開こうとするとなぜか開けない現象。
理由は、+[NSURL URLWithString:]を使ってファイルパスからURLを生成する際、RFC2396を満たさない文字が含まれているとインスタンスが生成されないためです。

NSString* path = @"/Users/foo/あいうえお.wav";
NSURL* badPattern = [NSURL URLWithString:path]; //nilになる

対策方法は簡単で、-[NSString stringByAddingPercentEscapesUsingEncoding:]を使ってエスケープしてやるだけです。

NSString* path = @"/Users/foo/あいうえお.wav";
NSURL* goodPattern = [NSURL URLWithString:
    [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
// Encodingの種類は適宜。

簡単な話なのですが、ついつい忘れてしまうなあ。
参考資料

Pocket

「日本語を含むパスを使う時の注意」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です