なんとか日誌

アプリとかギターとかオーディオとか

NSDataをNSStringに変換したい話

NSData.contentsOfURLでNSData型の変数に、指定URLのHTMLデータを保存

そのデータをNSStringに変換したいのだが…

 

世のHTMLのエンコードは統一されている訳ではなく、UTF-8でデコードすればShift-JISでエンコードされているHTMLを読み込むとクラッシュするし、その逆も然り

読み込むURLはランダムであり、事前に、「このURLはShift-JIS」だとか、そういう対処は出来ない

 

つまりNSDataをどうにかして、エンコードを区別しなければならないがそんな方法があるのだろうか…

 

追記

区別する方法はなさそうだったので、例えばNSString(data,encode)がnilを返したら、別のエンコードを試す、という形にしました。

            if(NSString(data: data, encoding: NSUTF8StringEncoding) != nil)

            {

                htmlString = NSString(data:data, encoding:NSUTF8StringEncoding)!

            }else if(NSString(data: data, encoding: NSShiftJISStringEncoding) != nil)

            {

                htmlString = NSString(data: data, encoding: NSShiftJISStringEncoding)!

            }else{

                htmlString = NSString(data: data, encoding: NSASCIIStringEncoding)!

            }

UTF-8とShift-JISでほぼ全てのウェブページを網羅出来ると思ったのでこれだけ(ほとんど意味ないけどASCIIにも対応している)

これでエラー吐かないので多分有効な対策

エンコードが間違っていたらnilを返すという仕様のおかげで助かった