0

テキストファイルを処理するアプリに取り組んでいます。

オープン ダイアログ アクセサリ ビューで、ユーザーが NSPopUpButton に表示したいファイルを選択すると、選択したファイルでサポートされているエンコーディングが表示されますが、これまでのところ、特定のエンコーディングでファイルを開くことができるかどうかをテストする唯一の方法は実際にそれを NSString にロードしようとしています。

現在、各エンコーディングに対してこれを行っています。

NSString *fileContents = [NSString stringWithContentsOfURL:selectedURL encoding:encoding error:nil];

if (fileContents)
{
    /* Add encoding to the list of supported encodings */
}

これにより、ファイル全体がオブジェクトにロードされfileContentsます。

ファイルを実際にロードせずにロードできるかどうかのみをテストすることは可能ですか?

4

1 に答える 1

1

これは、すべてを読まないと 100% の精度で予測することはできません。たとえば、多くのエンコーディングは ASCII のスーパーセットであり、ファイルの途中で読み取りを停止するとだまされます。おそらく、最初の段落にたまたまASCII しか含まれておらず、その後 4 段落後に、ファイルに大量の数式が突然含まれている可能性があります。

適切な妥協点は、既存のエンコーディングを指定するための規則をサポートすることです。たとえば、テキスト エディターは、ファイルの最初の数行にエンコーディング ヒントを埋め込むための特定の構文を好みvim、指定します。また、HTML および XML ファイルには、エンコーディング情報を含むタグを含めることができます。それらを読み取ることができれば、ファイル全体を読み取るのではなく、それらが正しいと想定してもかなり安全です。それ以外の場合は、確実に知るためにファイル全体を読む必要があります。emacs<meta>

(例外: 特定の Unicode エンコーディングは、他のエンコーディングでは使用されていないバイト順マークで始まるため、それらが本来の意味であると想定できます。)

于 2012-07-20T03:38:27.867 に答える