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

投稿者: sota 投稿日:

Pocket

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

/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の種類は適宜。

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

カテゴリー: iPadiPhoneMac

1件のコメント

NSURLで日本語の含むURLを使用する場合(iOS, Objective-C, NSURL) | nktmemo · 2014年2月5日 8:02 PM

[…] 日本語を含むパスを使う時の注意 | なんてこったいブログ […]

コメントを残す

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