[Objective-C] 文字列比較でisEqualToStringで同一判定できない事象が発生

iOSアプリで、ネットからファイルをダウンロードして、ローカルに保存、その後、そのファイル名でローカルに保存した後、
ダウンロード済み判定の為に、if文で「isEqualToString」で判定した所、問題が発生した。
同じ文字列でファイル名にしたにも関わらず、「false」判定結果になっている。
簡単に説明
1.URLからファイル名を取得してローカルファイル名として、保存
http://example.com/なんらかのデータ.pdf
./Document/なんらかのデータ.pdf
2.それぞれのファイル名を再取得してif文判定
1 2 3 4 5 6 7 8 9 |
NSString *webFilename = %http://example.com/なんらかのデータ.pdf%・・・のbasename NSString *localFilename = %./Document/なんらかのデータ.pdf%・・・のファイル名 if([localFilename isStringToString:webFilename]){ NSLog(@"true"); } else{ NSLog(@"false"); } |
結果は「false」となった・・・
原因解明
どうやら、webから取得したstringデータとローカルに保存されたファイル名のフォントデータが違うらしく、stringでは同じのはずが、文字コードが違っているようだ。
詳しくはココのページに書かれているが、
どうやら、「compareメソッド」をしたほうが都合がいいらしい。
※濁点文字などの文字コードが違っているとの事だ。
コード
1 2 3 4 5 6 |
if([localFilename compare:webFilename] == NSOrderedSame){ NSLog(@"true"); } else{ NSLog(@"false"); } |
無事に「true」で判定されるようになりました。
テキストデータにまで書き出して確認してみたが、見た目の文字列は同じなのに、確かに検索でヒットしないという結果だったので、ひとつ勉強になった件でした。