VB.NET2.0で、ファイルがテキストかバイナリかを判断したいのですが、
何か方法あるのでしょうか?
その "VB.NET 2.0" とは、VB for .NET Framework 2.0 のような意味でしょうか。
だとしたら、VB2005 あるいは VB8 などと表記した方が一般的かと。
> ファイルがテキストかバイナリかを判断したいのですが
何故、そのような判断が必要になったのか、その理由を教えてもらえませんか?
その目的如何によって、回答の方向性も変ってくるかと思いますので。
そもそもテキストは、バイナリの一種であるとも言えますので、このような
場合には、まずは「何をテキストと看做すのか」を正確に定義してからで
ないと、プログラムの書きようが無いかと思います。
特に問題になるのが、今回の目的において、サポート対象とする文字コードです。
単にテキストファイルと言っても、たとえば、日本語専用のテキストエディタに
Big5 や GB2312 などの中国語なテキストデータを渡した場合には、正しく
表示できませんよね。このような場合に、それらのファイルをテキストと
看做すのか、バイナリと看做すべきかが、今回の質問内容では曖昧です。
日本語テキストだとしても同様で、ソフトウェアの実装内容によっては、
「Shift_JIS は良いけど、EUC-JP は駄目」という事も多いでしょう。
あるいは、Unicode をサポートした他言語対応ソフトであったとしても、
「Unicode テキストでも、UTF-8, UTF-16 形式のみOK、UTF-7, UTF-16BE は駄目」
なんていう場合もありますし。
その上、同じバイナリを持ったファイルであっても、解釈の違いによって、
どの文字コードかの判定ができない場合があります。たとえば、
E0 E8 な 2バイトのファイルは、EUC-JP のテキストとして解釈した場合は
『琥』という文字を表し、Shift_JIS として解釈すれば『琲』となります。
さらに言えば、Acrobat文書(PDFファイル)のように、そのファイル内容が
「バイナリが含まれる場合もあれば、ASCII データのみで構成されることもある」
といった揺れを見せる場合もあります。
Win32APIのFindMimeFromData()とか?
ツイート | ![]() |