在python中,我使用zlib压缩了一个字符串,然后使用utf-8编码将其插入到blob类型的mysql列中.该字符串以utf-8的形式返回,但不清楚如何将其恢复为可以解压缩的格式.这是一些pseduo输出:
valueInserted = zlib.compress('a')='x\x9cK\x04\x00\x00b\x00b'
valueFromSqlColumn = u'x\x9cK\x04\x00\x00b\x00b'
zlib.decompress(valueFromSqlColumn)UnicodeEncodeError:'ascii'编解码器无法对位置1中的字符u'\ x9c'进行编码:序号不在范围内(128)
如果我这样做,它会插入一些额外的字符:
valueFromSqlColumn.encode('utf-8')='x\xc2\x9cK\x04\x00\x00b\x00b'
有什么建议?
我有一个archive.zip,其中包含两个加密的".txt"文件.我想解压缩存档以检索这2个文件.
这是我到目前为止所做的:
FILE *FileIn = fopen("./archive.zip", "rb");
if (FileIn)
printf("file opened\n");
else
printf("unable to open file\n");
fseek(FileIn, 0, SEEK_END);
unsigned long FileInSize = ftell(FileIn);
printf("size of input compressed file : %u\n", FileInSize);
void *CompDataBuff = malloc(FileInSize);
void *UnCompDataBuff = NULL;
int fd = open ("archive.zip", O_RDONLY);
CompDataBuff = mmap(NULL, FileInSize, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
printf("buffer read : %s\n", (char *)CompDataBuff);
uLongf UnCompSize = (FileInSize * 11/10 + 12);
UnCompDataBuff = malloc(UnCompSize);
int ret_uncp ;
ret_uncp = uncompress((Bytef*)UnCompDataBuff, &UnCompSize, …Run Code Online (Sandbox Code Playgroud) 我正在一个非常古老的Red Hat系统上编写Python C扩展.系统具有zlib 1.2.3,它不能正确支持大文件.不幸的是,我不能只是将系统zlib升级到更新的版本,因为一些软件包会进入内部zlib结构并且会破坏新的zlib版本.
我想建立自己的扩展,使所有的zlib的调用(gzopen(),gzseek()等)解析为我安装在我的用户目录中的自定义zlib的,不影响Python可执行程序和其他扩展的其余部分.
我已尝试libz.a通过libz.a在链接期间添加到gcc命令行来静态链接,但它不起作用(仍然无法使用gzopen()例如创建大文件).我也尝试过传递-z origin -Wl,-rpath=/path/to/zlib -lz给gcc,但那也行不通.
由于zlib的新版本仍然被命名zlib 1.x,所以soname它是相同的,所以我认为符号版本控制不起作用.有办法做我想做的事吗?
我在32位Linux系统上.Python版本是2.6,它是定制的.
编辑:
我创建了一个最小的例子.我正在使用Cython(版本0.19.1).
档案gztest.pyx:
from libc.stdio cimport printf, fprintf, stderr
from libc.string cimport strerror
from libc.errno cimport errno
from libc.stdint cimport int64_t
cdef extern from "zlib.h":
ctypedef void *gzFile
ctypedef int64_t z_off_t
int gzclose(gzFile fp)
gzFile gzopen(char *path, char *mode)
int gzread(gzFile fp, void *buf, unsigned int n) …Run Code Online (Sandbox Code Playgroud) 我有一个C++应用程序,需要使用标准的压缩格式的目录.我想过使用zip格式.因此,zlib显而易见.
我的问题是构建字典,即将包含一些zlib文件的目录压缩到标准zip文件.
我已经读过zlib做了但我不明白怎么做.我检查了minzip代码.它似乎使用gzip.我可以构建自己的格式,但我希望能够使用7z打开这些文件进行调试(以防万一).
我应该在zlib中使用什么来压缩目录?
[编辑] 在minzip 我使用minzip压缩1文件到它的gz版本 - >不拉链但对我来说很好.(我将在世界各种编译器上使用它 - 如果客户端平台出现问题,则标准格式更容易)
此外,还有这个代码main.它在文件列表上循环并将其写入输出.但是档案中文件位置的信息在哪里?
do {
if (uncompr) {
if (copyout) {
file = gzopen(*argv, "rb");
if (file == NULL)
fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
else
gz_uncompress(file, stdout);
} else {
file_uncompress(*argv);
}
} else {
if (copyout) {
FILE * in = fopen(*argv, "rb");
if (in == NULL) {
perror(*argv);
} else {
file = gzdopen(fileno(stdout), outmode);
if (file == NULL) error("can't gzdopen stdout");
gz_compress(in, file);
} …Run Code Online (Sandbox Code Playgroud) 我正在使用Code Blocks IDE,我想为SFML安装Tiled Map Editor.所以,我下载了源代码并将其导入我的项目.不幸的是,由于缺少zlib库,构建完成了错误.我下载并重新构建.这次我收到的错误如下:
undefined reference to `inflateInit2_'|
undefined reference to `inflateEnd'|
undefined reference to `inflateEnd'|
Run Code Online (Sandbox Code Playgroud)
在Internet上我找到了加入链接器命令的建议-lz,但编译器拒绝抛出错误:找不到-lz.有谁知道如何修理它?
问候.
我在Python中有一个脚本来压缩大字符串:
import zlib
def processFiles():
...
s = """Large string more than 2Gb"""
data = zlib.compress(s)
...
Run Code Online (Sandbox Code Playgroud)
当我运行此脚本时,出现错误:
ERROR: Traceback (most recent call last):#012 File "./../commands/sce.py", line 438, in processFiles#012 data = zlib.compress(s)#012OverflowError: size does not fit in an int
Run Code Online (Sandbox Code Playgroud)
一些信息:
zlib的.version ='1.0'
zlib.ZLIB_VERSION ='1.2.7'
# python -V
Python 2.7.3
# uname -a
Linux app2 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
# free
total used free shared buffers cached
Mem: 65997404 8096588 57900816 0 184260 7212252
-/+ buffers/cache: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Windows上构建OpenEXR 2.2,但下载附带的说明没有按预期工作.IlmBase的指令有效,但是一旦我得到OpenEXR指令,它就会因为zlib而失败.此时的步骤是:
3. Go to http://www.zlib.net and download zlib
Run Code Online (Sandbox Code Playgroud)
所以我去了这个网站,开头的部分是:当前版本在这里公开发布:我下载了 zlib源代码,版本1.2.8,zipfile格式......
然后,我转到下一步,这是我得到错误的地方:
4. Launch a command window, navigate to the OpenEXR folder with
CMakeLists.txt, and type command:
setlocal
del /f CMakeCache.txt
cmake
-DZLIB_ROOT=<zlib location>
-DILMBASE_PACKAGE_PREFIX=<where you installed the ilmbase builds>
-DCMAKE_INSTALL_PREFIX=<where you want to instal the openexr builds>
-G "Visual Studio 10 Win64" ^
..\openexr
Run Code Online (Sandbox Code Playgroud)
所以这是我输入的命令:
cmake -DZLIB_ROOT=C:\Users\erik\Documents\zlib-1.2.8 -DILMBASE_PACKAGE_PREFIX=C:\Users\erik\Documents\ilmbase-2.2.0\bin -DCMAKE_INSTALL_PREFIX=C:\Users\erik\Documents\ilmbase-2.2.0\bin -G "Visual Studio 10 Win64" ^..\openexr-2.2.0
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
找不到ZLIB(缺少:ZLIB_LIBRARY)(找到版本"1.2.8")
第一个问题是,指令没有说明任何关于ZLIB_LIBRARY的内容.其次,zlib下载看起来像是所有源代码.不涉及.lib或.dll文件.
我有一个大的.gz文件(大小约为100Mb),但是,当我使用以下代码处理文件时,输出的文件只有256k.
var fs = require('fs'), zlib = require('zlib');
var inp1 = fs.createReadStream('feed.xml.gz');
var out1 = fs.createWriteStream('feed.xml');
inp1.pipe(zlib.createGunzip()).pipe(out1);
Run Code Online (Sandbox Code Playgroud)
问题似乎与zlib.createGunzip()管道有关.
有没有办法来解决这个问题?我想尝试直接从互联网流式传输.
我正在尝试从命令行编译zlib,我在使用时收到此消息-Wall -Wextra -Wconversion(完整的交叉编译脚本如下):
编译器错误报告对于./configure(可能是删除
-Werror)来说太苛刻了 .
这是生成线的配置测试:
cat > $test.c << EOF
int foo() { return 0; }
EOF
echo "Checking for obsessive-compulsive compiler options..." >> configure.log
if try $CC -c $CFLAGS $test.c; then
:
else
echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
leave 1
fi
Run Code Online (Sandbox Code Playgroud)
我不清楚究竟是什么判断过于严厉(特别是因为-Werror不存在).我也不太清楚测试中使用的示例程序是做什么的,所以我不清楚判断编译器警告"过于苛刻"的标准是什么.
什么是zlib抱怨太苛刻了?
#! /bin/sh
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
export LD=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
export AR=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar
export RANLIB=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib
export CFLAGS="-Wall -Wextra -Wconversion …Run Code Online (Sandbox Code Playgroud) 给定Elixir中代表压缩文件的二进制文件,如何将它们传递给Erlang的zlib来进行膨胀?
compressed = <<120, 218, 237, 125, 123, 115, 28, 71, 126, ...>>
Run Code Online (Sandbox Code Playgroud)
我试过了:
z = :zlib.open()
uncompressed = :zlib.inflate(z, compressed)
:zlib.close(z)
Run Code Online (Sandbox Code Playgroud)
返回的错误是:
** (ErlangError) erlang error: :einval
:zlib.call/3
:zlib.inflate/2
Run Code Online (Sandbox Code Playgroud)
期待一个"iodata"作为一个论点,所以也许我只需要转换它?