我正在尝试将 var 内部的内容解压缩到同一个 var 或另一个变量中。 我使用 gzip -k 文件名创建了一个 .gz 文件。它生成了一个 filename.gz,同时保留了原始文件。我将此 gz 文件上传到服务器。 以下行将 gz 文件下载到 var。是的,我可以使用 package require http 等...
set testvar [exec wget -q -O - url-to-gz-file]; string length $testvar
字符串长度 $testvar 返回一个数字。 现在,我需要将 $testvar 内部的内容缩小/解压缩到同一个 var 或另一个 var(例如 testvar2),并且该 var 必须包含原始文件的内容。我的意思是,压缩之前文件的内容。原始文件只是一个文本文件。
我可能需要指示 testvar 是二进制的。
这可能吗?我不想先将 .gz 文件下载到硬盘然后再进行处理。这一切都需要“在记忆中”完成。
谢谢。
最简单的方法是将
wget
插入 gunzip
:
set result [exec wget -q -O - url-to-gz-file | gunzip -c]
这需要将未压缩的内容按照系统默认的字符编码进行编码;如果它是二进制数据或其他文本编码,您将会遇到问题(由于字符编码转换,您的
teststr
变量可能无法保存有效的 gzip 数据)。
zlib
命令,用于处理 zlib 和 gzip 压缩。 zlib gunzip STRING
子命令在这里特别有用。您必须使用 open
,而不是 exec
,才能获取可以传递到 zlib gunzip
的二进制数据。它看起来像:
# b for opening in binary mode instead of having to set it with fconfigure
set wget [open "| wget -q -O - url-to-gz-file" rb]
set binData [zlib gunzip [read -nonewline $wget]]
close $wget
set result [encoding convertfrom utf-8 $binData] ;# Or whatever encoding the file uses
您可以使用
zlib push
将图层添加到 wget
通道,以便在其上使用 read
也会自动解压缩数据。
set wget [open "| wget -q -O - url-to-gz-file" rb]
zlib push gunzip $wget
set result [encoding convertfrom utf-8 [read -nonewline $wget]]
close $wget