压缩Unicode字符

Arr*_*rry 5 java compression unicode gzip gzipoutputstream

GZIPOutputStream在Java程序中使用它来压缩大字符串,最后将其存储在数据库中。

我看到在压缩英文文本时,我实现了1/4到1/10的压缩比(取决于字符串值)。例如,假设我的原始英文文本为100kb,那么平均压缩文本大约为30kb。

但是当我压缩unicode字符时,压缩的字符串实际上比原始字符串占用更多的字节。举例来说,我的原始unicode字符串为100kb,然后压缩版本为200kb。

Unicode字符串示例: "?????????????for.Hi???"

谁能建议我也如何实现unicode文本的压缩?为什么压缩版本实际上比原始版本大?

我在Java中的压缩代码:

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            GZIPOutputStream zos = new GZIPOutputStream(baos);

            zos.write(text.getBytes("UTF-8"));
            zos.finish();
            zos.flush();

            byte[] udpBuffer = baos.toByteArray();
Run Code Online (Sandbox Code Playgroud)

Ale*_*vic 0

我不太懂中文,但据我所知,GZIP 压缩取决于文本的重复序列,而这些重复序列会随着“描述”而改变(这是一个非常高级的解释)。这意味着,如果字符串中的 20 个位置有“library”一词,算法会将“library”一词存储在侧面,并注意它应该出现在 x、y、z 位置...因此,您可能不会原始字符串中有很多冗余,因此您无法节省很多。相反,您的管理费用多于节省的费用。

我不是真正的压缩专家,也不知道细节,但这就是压缩的基本原理。

PS 这个问题可能只是重复:Why gzipcompressed buffer size is Greater then uncompressed buffer?