ユーザーから提供されたファイルがテキストであるかどうかを判断する必要があるアプリケーションを作成しています。これは、ファイル内で検索を実行しているためです。
私は拡張子に基づいていません。たとえば、ソースコードファイルや、テキストコンテンツを含む他のファイル(よく知られていない拡張子の場合でも)も検索したいからです。
ファイルがテキストであるかどうかを判断する方法はありますか?
ユーザーから提供されたファイルがテキストであるかどうかを判断する必要があるアプリケーションを作成しています。これは、ファイル内で検索を実行しているためです。
私は拡張子に基づいていません。たとえば、ソースコードファイルや、テキストコンテンツを含む他のファイル(よく知られていない拡張子の場合でも)も検索したいからです。
ファイルがテキストであるかどうかを判断する方法はありますか?
データを開いて読み取る必要があります。
ASCIIテキストファイルの場合、これは文字が印刷可能な範囲内にあることを確認することを意味します。
UTFテキストファイルの場合、ファイルの残りの部分を読み取る前に、最初にBOM(バイト順マーク)を読み取ってエンコードを決定する必要がある場合があります。
詳細はこちら: http: //en.wikipedia.org/wiki/Text_file
提供されたソリューションをみんなに感謝します!私はちょうど仕事を非常にうまくやっているように見えるフレームワークを見つけました!
参考のためにここにリンクを残します:https ://github.com/aidansteele/MagicKit
確実にする方法はありません。ただし、ほとんどの制御文字はASCIIファイルには表示されないことに注意してください。ほとんどのASCII制御文字のサブセットを作成することで、かなり適切な推測を行うことができます。次に、サブセット内にあるファイル内の文字数をカウントします。ASCIIファイルの場合はカウントをゼロにする必要があります。しかし、最終的な分析では、ネガティブを証明する必要があります。これは面倒なことです。
次の方法を試してください。
func isBinary(_ path: String) -> Bool? {
if FileManager.default.fileExists(atPath: path) == false {
return nil
}
return ( try? String(contentsOfFile: path) ) == nil
}
このコードの問題は、大きなファイルでは機能しないことです(チェックが長くなります)