我想从一些包含嵌入式SQL语句的二进制文本文件中抓取字符串数据。我不需要任何花哨的清理 - 只是某种方式来提取可读文本。我正在使用vb.net,但是调用外部工具也可以。
答案 0 :(得分:3)
答案 1 :(得分:3)
GNU字符串实用程序已经永远存在,并且通过使用启发式方法从二进制文件中抽取任何“看起来像字符串”的数据,或多或少地做到这一点。
从MinGW获取Win32的GNU binutils(包括字符串): http://sourceforge.net/projects/mingw/files/
答案 2 :(得分:1)
这并不像最初看起来那么微不足道。字符串可以以多种方式编码。您认为“可读文本”,不可读部分的外观如何?说它看起来像这样:
&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字符(而某些编程语言则不允许)。 Here's a thread给出了一个VB示例,说明如何继续,它可能会给你一些提示。
PS:分析这类数据可能很难,如果你可以把你的文件上传到某个地方,这将有很大的帮助,所以我们可以看看。答案 3 :(得分:0)
谢谢大家。好主意。真的帮助我思考。全方位投票。结束了我不需要非常确定它们是字符串所以我选择了一个快速,草率,丑陋的黑客。
'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)