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

2016年2月13日

Objective-C テクノロジー プログラミング

iOSアプリで、ネットからファイルをダウンロードして、ローカルに保存、その後、そのファイル名でローカルに保存した後、 ダウンロード済み判定の為に、if文で「isEqualToString」で判定した所、問題が発生した。 同じ文字列でファイル名にしたにも関わらず、「false」判定結果になっている。

簡単に説明

1.URLからファイル名を取得してローカルファイル名として、保存

http://example.com/なんらかのデータ.pdf ./Document/なんらかのデータ.pdf

2.それぞれのファイル名を再取得してif文判定

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メソッド」をしたほうが都合がいいらしい。 ※濁点文字などの文字コードが違っているとの事だ。

コード

if([localFilename compare:webFilename] == NSOrderedSame){ NSLog(@"true"); } else{ NSLog(@"false"); } 無事に「true」で判定されるようになりました。 テキストデータにまで書き出して確認してみたが、見た目の文字列は同じなのに、確かに検索でヒットしないという結果だったので、ひとつ勉強になった件でした。

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ