我有两个xml文件,一个是LZW压缩的,另一个是纯文本。我如何知道是否压缩?
显然要做的事情当然是将字符串提供给LZW解压缩器,看看是否有错误和/或字符串的长度增加了大约200%。
除此之外,一个(格式良好的)LZW字符串或文件与魔法值0x1F 0x9D
匹配。当然,也有可能LZW压缩字符串并且不包含魔术值,但这是一个开始(非常容易检查)。
一个(格式良好的)XML文档应该以一个XML声明开始,必须以一个元素开始,只能选择性地在前面加空格。XML声明以字符串<?xml
开头,元素标签必须以字母开头。
因此,如果您在遇到第一个<
之前看到除空格之外的任何内容,或者后面的下一个字符不是?
或字母(并且在遇到>
之前只跟随字母和数字),则字符串不能是XML。由于知道字符串是XML或压缩的XML,因此必须对其进行压缩。对于有一点正则表达式练习的人来说,把它压缩成10-15个字符的模式可能很容易。
愚蠢的简单测试:第一个字符是<
吗?
查找无效字符或无意义字符(如null字符)。如果它们存在,那么它就被压缩了。
如果不是,那么它要么是常规的XML,要么文件非常小(否则这是极不可能的)。
如果您想知道它是否被压缩,那么这将有助于您解压缩文件,并且您愿意使用库来完成繁重的工作:
使用压缩库总是尝试解压缩文件。让它决定文件是否被压缩。之后,将结果文件传递给xml库,并让该库决定是否具有有效和预期的xml文件。如果可能的话,不要重新创建公共库的功能,只需确保正确地处理库返回的信息。