忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

iOSにて異なるOS間の文字列を正しく比較する2つの方法

わか

iOSにてwindowsにて作成したファイルを開いた際に、文字化けを起こしたり文字列比較を行う際に想定通りに動作してくれない現象が発生しました。どうもiOSはUTF8-MACという文字コードで動作しているらしく、濁点の文字が分離して保存されているようです。

・問題点
別OSで作成した文字列をiOSで作成した文字列と比較した場合、
NSLogなどで表示すると同じ文字列なのに、isEqualToStringするとNOが返る。

・原因
iOSのUTF8は、UTF8-MACなので濁点がbyte単位で分かれるようです
isEqualToStringだとbyte単位で比較を行うので、NOが返るようです。

・解決策1
compareで比較する。
compareだとbyte単位で比較が行われないため、想定通りにNSordersame(文字列一致)が返ります。

・解決策2

decomposedStringWithCanonicalMappingを使用する。
別OS
文字列をNSStringに代入した後、上記メソッドを使用してUTF8-MACに変換する。その後文字列比較することで、想定通りの動作を行います。この場合、isEqualToStringでもcompareでも同じ結果が返ります。


文字コードの違いって昔からの経緯もあって、ややこしいですね。

拍手[0回]

PR