如何将xml文件编码为xfdl(base64-gzip)?

时间:2020-03-05 18:38:46  来源:igfitidea点击:

在阅读其他内容之前,请花一些时间阅读原始主题。

概述:.xfdl文件是gzip压缩的.xml文件,然后已将其编码为base64. 我希望将.xfdl解码为xml,然后可以对其进行修改,然后重新编码为.xfdl文件。

xfdl > xml.gz > xml > xml.gz > xfdl

我已经能够获取一个.xfdl文件,并使用uudeview从base64对其进行解码:

uudeview -i yourform.xfdl

然后用gunzip解压

gunzip -S "" < UNKNOWN.001 > yourform-unpacked.xml

生成的xml具有100%可读性,并且看起来很棒。然后,无需修改xml,我应该能够使用gzip重新压缩它:

gzip yourform-unpacked.xml

然后在base-64中重新编码:

base64 -e yourform-unpacked.xml.gz yourform_reencoded.xfdl

如果我的想法是正确的,则原始文件和重新编码的文件应该相等。但是,如果我将yourform.xfdl和yourform_reencoded.xfdl放在无法比较的位置,则它们不匹配。另外,可以在http://www.grants.gov/help/download_software.jsp#pureedge">.xfdl查看器中查看原始文件,该查看器说重新编码的xfdl不可读。

我还尝试过uuenview在base64中重新编码,它也会产生相同的结果。任何帮助,将不胜感激。

解决方案

回答

gzip算法的不同实现将始终生成略有不同但仍正确的文件,并且原始文件的压缩级别可能会与运行该文件时的压缩级别有所不同。

回答

据我所知,我们无法找到已压缩文件的压缩级别。压缩文件时,可以使用-来指定压缩级别,其中的范围是1到9(1是最快的压缩,9是最大的压缩文件)。在实践中,永远不要将压缩文件与已提取并重新压缩的文件进行比较,因为细微的差异很容易出现。在情况下,我将比较base64编码版本而不是gzip版本。

回答

有趣的是,我会试一试。但是变化并不大。新编码的文件更长,并且在比较前后二进制文件时,数据几乎不匹配。

之前(前三行)

H4sIAAAAAAAAC+19eZOiyNb3/34K3r4RT/WEU40ssvTtrhuIuKK44Bo3YoJdFAFZ3D79C6hVVhUq
dsnUVN/qmIkSOLlwlt/JPCfJ/PGf9dwAlorj6pb58wv0LfcFUEzJknVT+/ml2uXuCSJP3kNf/vOQ
+TEsFVkgoDfdn18mnmd/B8HVavWt5TsKI2vKN8magyENiH3Lf9kRfpd817PmF+jpiOhQRFZcXTMV

之后(前三行):

H4sICJ/YnEgAAzEyNDQ2LTExNjk2NzUueGZkbC54bWwA7D1pU+JK19/9FV2+H5wpByEhJMRH
uRUgCMom4DBYt2oqkAZyDQlmQZ1f/3YSNqGzKT3oDH6RdE4vOXuf08vFP88TFcygYSq6dnlM
naWOAdQGuqxoo8vjSruRyGYzfII6/id3dPGjVKwCBK+Zl8djy5qeJ5NPT09nTduAojyCZwN9

如我们所见," H4SI"匹配,然后是pandemonium。

回答

我们需要将以下行放在XFDL文件的开头:

application / vnd.xfdl; content-encoding =" base64-gzip"

生成base64编码的文件后,在文本编辑器中将其打开,并将上面的行粘贴到第一行。确保base64'ed块从第二行的开头开始。

保存并在查看器中尝试!如果它仍然不起作用,则可能是由于对XML所做的更改使它在某种程度上不兼容。在这种情况下,在修改完XML之后,但在压缩并进行base64编码之前,请使用.xfdl文件扩展名保存它,然后尝试使用查看器工具将其打开。如果查看器采用有效的XFDL格式,则它应该能够解析和显示未压缩/未编码的文件。

回答

gzip会将文件名放在文件的标题中,以便gzip压缩的文件的长度根据未压缩文件的文件名而有所不同。

如果gzip在流上起作用,则文件名将被省略,并且文件会短一些,因此应该可以使用以下命令:

gzip yourform-unpacked.xml.gz

然后在base-64中重新编码:
base64 -e yourform-unpacked.xml.gz yourform_reencoded.xfdl

也许这将产生相同长度的文件