場合によっては、ファイルの読み取り中にファイルのエンコーディングを知る必要があります。Apple の String Programming Guide が示唆するように、時々できることがあります。
エンコーディングが不明なデータの読み取り
不明なエンコーディングのテキストを見つけた場合は、避けられないエラーを修正するメカニズムがあることを確認することをお勧めします。たとえば、Apple のメールおよび Safari アプリケーションにはエンコード メニューがあり、TextEdit を使用すると、ユーザーは明示的に指定されたエンコードでファイルを再度開くことができます。
エンコーディングを推測せざるを得ない場合 (明示的な情報がない場合は推測であることに注意してください):
stringWithContentsOfFile:usedEncoding:error: または initWithContentsOfFile:usedEncoding:error: (または URL ベースの同等のもの) を試してください。
これらのメソッドは、リソースのエンコーディングを決定しようとし、成功した場合は、使用されたエンコーディングを参照によって返します。
(1) が失敗した場合は、エンコーディングとして UTF-8 を指定して、リソースの読み取りを試みます。
(2) が失敗した場合は、適切なレガシー エンコーディングを試してください。
ここでの「適切」は、状況によって少し異なります。データの取得元に応じて、デフォルトの C 文字列エンコーディング、ISO、Windows Latin 1、またはその他のエンコーディングである可能性があります。
最後に、Application Kit から NSAttributedString の読み込みメソッド (initWithURL:options:documentAttributes:error: など) を試すことができます。
これらのメソッドは、プレーン テキスト ファイルの読み込みを試み、使用されているエンコーディングを返します。これらは多かれ少なかれ任意のテキスト ドキュメントで使用でき、アプリケーションがテキストに関する特別な専門知識を持っていない場合は検討する価値があります。それらは、自然言語テキストではない Foundation レベルのツールまたは文書には適切でない場合があります。
ここで私はいくつかの問題に遭遇しました。エラーがわかる場合もあります。たとえば、UTF8 を使用して GB2312 エンコーディング ファイルを読み取ると、nil が返されるので、エラーがわかります。しかし、BIG5 の方法で GB2312 エンコーディング ファイルを読み込むと、エラーがわかりません。
NSAttributedString の init メソッドは Mac で動作するかもしれませんが、iOS になると iOS7 が必要で、あまり良くありません。
私もそれを検索し、 cocoabuilder だけでなく Mac でも、このように議論しているのを見つけました。では、iOS ではどうでしょうか。