0

我有两个xml文件,一个是LZW压缩的,另一个是纯文本的。我怎么知道是否被压缩?

4

4 回答 4

4

显而易见的事情当然是将字符串提供给 LZW 解压缩器并查看是否存在错误和/或字符串的长度增加了大约 200%。

除此之外,一个(格式良好的)LZW 字符串或文件带有魔法值0x1F 0x9D。当然 LZW 可以压缩一个字符串而不包含魔法值,但这是一个开始(很容易检查)。

一个(格式良好的)XML 文档应该以一个 XML 声明开始,并且必须以一个元素开始,只有可选的前面有空格。XML 声明以字符串开头<?xml,元素标记必须以字母开头。
因此,如果您在遇到第一个字符之前看到除空格之外的任何内容,<或者如果后面的下一个字符不是两者?或字母(在遇到 a 之前只有字母和数字>),则该字符串不能是 XML。由于您知道字符串是 XML 或压缩的 XML,因此必须对其进行压缩。对于有一点正则表达式练习的人来说,将其压缩成 10-15 个字符的模式可能很容易。

于 2014-06-24T09:37:54.653 回答
0

如果您想知道它是否被压缩,这将有所帮助,因此您可以解压缩文件并且您愿意使用库来完成繁重的工作:

使用压缩库始终尝试解压缩文件。让它决定文件是否被压缩。之后将生成的文件传递给 xml 库,并让该库决定您是否有一个有效且预期的 xml 文件。如果可能,不要重新创建常用库的功能,只需确保对返回的库信息进行正确处理。

于 2014-06-24T09:30:53.217 回答
0

愚蠢的简单测试:第一个字符是 a<吗?

于 2014-06-24T09:09:54.103 回答
0

寻找无效或无意义的字符(如空字符)。如果它们存在,那么它就会被压缩。

如果不是,那么要么是常规 XML,要么文件非常小(否则这不太可能)。

于 2014-06-24T09:27:50.090 回答