gzip 并将粘贴内容复制到 C 程序中的 String/char 数组

gzip and copy paste content to a String/ char array in C program

我正在尝试制作一个 arduino 网络服务器,这部分已经完成。现在我需要使用一些压缩。

这是我要提供的 simple.htm 网页

<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>

我试着 gzip 这个(尝试了不同的工具,命令行 gzip,keka,两者略有不同),并得到了 simple.htm.gz。我在文本编辑器中打开它,它看起来像这样

ã˝…Vsimple.htm-å;Ä D{OÅêÿoh¸ƒ∆hacπ?§·ˆ.ƒÍeÊe vjñuÓÑ
ש
¯±=:™Çc≠∆(zÁfl ܵª
H.YQ2G6ÑçG≤HJNÊ=3fl}?ı=me

在服务器中,我这样做了

char *htmlContent="ã˝…Vsimple.htm-å;Ä D{OÅêÿoh¸ƒ∆hacπ?§·ˆ.ƒÍeÊe vjñuÓÑ◊©¯±=:™Çc≠∆(zÁfl ܵªH.YQ2G6ÑçG≤HJNÊ=3fl}?ı=me"

我服务 header 和内容,包括“Content-Encoding: gzip”;但是 chrome 说

This webpage is not available

ERR_CONTENT_DECODING_FAILED

我知道我的网络服务器可以在没有 gzip 的情况下工作,我已经测试过它并且可以在浏览器上看到它。我在这里用 gzip 做错了什么?

您从文本文件中复制和粘贴的内容可能删除了一些不可打印的字符。无论如何,它删除了所有换行符,正如您可以清楚地看到的那样。

现在,gzip 文件不是 ASCII,您真的不应该像 C 中的字符串文字一样对待它们。至少,您必须用转义表示替换所有非 ASCII 字符。

通常,执行此操作的正确方法可能是将压缩文件添加到二进制文件的数据或文本部分,并在需要的地方使用它的地址。

这里有一个 answer 解释了如何将二进制 blob 添加到目标文件以及如何从 C 代码访问它。