我正在寻找压缩小文本字符串的算法:50-1000字节(即URL).哪种算法最适合这个?
我正在与服务器连接,该服务器要求发送给它的数据使用Deflate算法(Huffman编码+ LZ77)进行压缩,并且还发送我需要的数据以进行Inflate.
我知道Python包含Zlib,并且Zlib中的C库支持对Inflate和Deflate的调用,但这些显然不是由Python Zlib模块提供的.它提供压缩和解压,但是当我拨打电话,如下列:
result_data = zlib.decompress( base64_decoded_compressed_string )
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Error -3 while decompressing data: incorrect header check
Run Code Online (Sandbox Code Playgroud)
Gzip并没有更好; 在打电话时如:
result_data = gzip.GzipFile( fileobj = StringIO.StringIO( base64_decoded_compressed_string ) ).read()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
IOError: Not a gzipped file
Run Code Online (Sandbox Code Playgroud)
这是有道理的数据是平减文件不是真正的Gzip压缩文件.
现在我知道有一个Deflate实现可用(Pyflate),但我不知道Inflate的实现.
似乎有几个选择:
我正在寻求解决方案,但缺乏解决方案,我将感谢见解,建设性意见和想法.
附加信息:为了我需要的目的,放松(和编码)字符串的结果应该与下面的C#代码片段给出相同的结果,其中输入参数是与要压缩的数据相对应的UTF字节数组:
public static …Run Code Online (Sandbox Code Playgroud) 我有一个超过800个字符的数据字符串,我正在尝试压缩以用于QR码(我想要至少50%,但如果我把它减少到不到七百,可能会很高兴) .这是我正在尝试压缩的示例字符串,包含841个字符:
+hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA
97mDyclKSttIZXOxSPBf85LEN4PUUqj65aio5qwZttZSZ64wpnMFg/7Alt1R39IJvTmeYfBm
Tuc1noMMcknlydFocwI8/sk2Sje5MR/nYNX0LPkQhzyi5vFJdrndqAgXYULsYrB3TJDAwvgs
Kw9C5EJnrlqcb21zg17O2gU/C8KY0pz9RPzUl1Sb0rCP8iZCeis4YbQ5tuUppOfnO/X0Mosv
SOQJ/bF9juKW8ocnQvNjsNxGV1gPkWWtiU2Old7Qm7FLDqL6kQKrq356yifs0NiMVGdvAg32
eugewuttCugoZASYOpQdwPu1jMxVO1fzF3zEy5w6tDlcfA2DZwa+un9/k8XZWAO/KVExy68q
UtVRQxsIOKgpl/2tNw5DBAKbykKIkmizbsA2xtzqnYqld4kOdNMJh3YjlqWF9Bt8MZo7a+Q6
jgayr2rjpyIptc599DGtvp68ZNQ64TKNmiMnnyGMo3E+xW34G3RrsYnHGm+xJoLKoOJhacDu
oZke1ycJgQv+Y61WPrvtFOVBxV5rvSzO0+8px5AWN3uCrrw1RmT5N14IVhh6BOtRjsifqIB2
dAKxzBNsvbXm1SzkuyqYiMnp5ivy3m2mPwc9GLsykx0FRIkhCYO8ins9E5ot9QvVnE155MFA
8FVwsP5uNdOF4EzQS2/h2QK3zb5Yq4Nftlo605Dd5vuVN/A7CUN38DaAKBxDKgqDzydfQnZw
R0hTfMHNLgBJKNDSpz2P6almGlUJtXT6IYmzuU2Iaion8ePG
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下三个库:
我遇到了压缩实际上使字符串更长的问题.我的理解是DeflateStream的开销最小,但它仍在添加字符.使用DotNetZip,我告诉它使用最大压缩:
Imports Ionic.Zlib
Shared Function CompressData(data As Byte()) As Array
Dim msCompressed As MemoryStream = New MemoryStream
' I'm not sure if the last parameter on this next function should be
' true (for LeaveOpen), but it doesn't seem to affect it either way.
Dim deflated As DeflateStream = New DeflateStream(msCompressed, _
CompressionMode.Compress, CompressionLevel.BestCompression, True)
' …Run Code Online (Sandbox Code Playgroud) 我有超过1亿个唯一字符串(MySQL数据库中的VARCHAR(100)UNIQUE).现在我使用下面的代码从它们创建唯一的哈希值(VARCHAR(32)UNIQUE)以减少InnoDB表的索引大小(varchar(100)上的唯一索引大约是varchar(32)字段的3倍).
id = hashlib.md5(str).hexdigest()
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以从这些字符串创建更短的ID并做出合理的唯一性保证?