埋め込みSQLステートメントを含むいくつかのバイナリテキストファイルから文字列データを取得したいと思います。特別なクリーンアップは必要ありません。読み取り可能なテキストを抽出するための何らかの方法が必要です。私はvb.netを使用していますが、外部ユーティリティの呼び出しも機能します。
4 に答える
GNU 文字列ユーティリティは永遠に存在しており、ヒューリスティックを使用してバイナリから「文字列のように見える」データをヤンクすることにより、多かれ少なかれこれを行っています。
MinGW から Win32 用の GNU binutils (文字列を含む) を取得します: http://sourceforge.net/projects/mingw/files/。
これは、最初に思われるほど簡単ではありません。文字列はさまざまな方法でエンコードできます。あなたが「読めるテキスト」と考えるもの、読めない部分はどのように見えますか? 次のように表示されます。
&8)JÓxZZ`\■£ÌS?E?L?E?C?T?*?F?R?O?M?m?y?T?b?l?§ıÍ4¢
UTF-16 または別のマルチバイト エンコーディングを使用してエンコードされている可能性が高いため、幸運です。これらを認識するのはかなり簡単です。しかし、他のほぼすべてのケース (UTF-8、ISO-8859-1、Windows-1252) では、個々の文字がテキストであるか非テキストであるかを区別することはほぼ不可能です。 「読みやすいテキスト」の始まりと終わり方。
ポイントは、何でも許可され、読み取り可能なテキストと見なされるということです。UTF-8、ASCII、および Windows-1252 では、NULL 文字も使用できます (一部のプログラミング言語では使用できません)。これは、どのように進めることができるかの VB の例を示すスレッドです。いくつかのヒントが得られるかもしれません。
追伸: この種のデータの分析は難しい場合があります。ファイルをどこかにアップロードしていただければ、非常に役に立ちます。
皆さんありがとう。素晴らしいアイデア。考えるのに本当に役立ちました。至る所で賛成票を投じます。結局、それらが文字列であることを十分に確認する必要はなかったので、手早く、ずさんで、醜いハックを行いました。
'strip out non-string characters
For Each b As Byte In byteArray
If b = 9 Or b = 10 Or b = 13 Or (b > 31 And b < 127) Then
newByteArray(i) = b.ToString
i += 1
End If
Next
'move it into a string
resultString = System.Text.Encoding.ASCII.GetString(newByteArray)