ASCII文本字符串缩短

时间:2010-02-20 23:50:57

标签: javascript compression base64 huffman-code

我对安全性或其他任何性质并不感兴趣,但我需要一些允许我“压缩”/“解压缩”字符串的函数。我尝试过Base64,但是字符串的大小存在很大问题,它会使它更长。我也知道这个霍夫曼的东西,但这不起作用,因为它也使它更长(在内存方面更少,它是一个整数)。

换句话说,我希望将一些任意字符串'djshdjkash'编码为其他字符串'dhaldhnctu'。能够从一个到另一个,并使新字符串的长度等于或小于原始字符串。

这是否可以使用Javascript,它已经完成了吗?

  • 需要澄清,正如我所说的安全不是目标,只是伪装字符串并保持其长度(或缩短它)。 Base64是最好的例子,但它使字符串更长。 ROT13很整洁,但不包括所有ASCII字符,只包括字母。

5 个答案:

答案 0 :(得分:2)

您需要压缩,而不是编码。编码通常会添加位。谷歌“字符串压缩算法。”

答案 1 :(得分:1)

答案 2 :(得分:1)

由于ROT13因为它只影响alpha而出局,为什么不在更大的字符集中实现某些东西。设置包含整个可打印字符集的from字符数组和包含不同顺序的相同字符的to数组。

然后对于字符串中的每个字符,如果它在from数组中,则将其替换为to数组中的等效位置。

这根本不会产生压缩,但会满足您的所有要求(更短或相同的长度,伪装的字符串)。

在伪代码中,类似于:

chfrom = "ABCDEF..."
chto   = "1$#zX^..."
def encode(s1):
    s2 = ""
    foreach ch in s1:
        idx = chfrom.find(ch)
        if idx == -1:
            s2 += ch
        else:
            s2 += chto[idx]
    return s2
def decode(s1):
    # same as encode but swap chfrom and chto.

答案 3 :(得分:1)

我不确定你想要压缩什么。如果它是字符串的长度(由String.length()看到,则可以将两个ASCII字符压缩为Unicode字符。因此hello, world(12个字符)之类的字符串可能会导致\u6865\u6c6c\u6f2c\u206f\u6f72\u6c64 (6个字符)。你必须非常小心,虽然你不会生成像\uFFFF这样的无效字符,并且你总是可以从压缩字符串返回到未压缩字符串。

另一方面,如果你想减少字符串文字的长度,这种方式是完全错误的。因此,请说明在什么情况下要压缩字符串。

答案 4 :(得分:0)

您可以使用简单的substitution cipher。这是一个example in JavaScript

请注意,有一些工具可以打破替换密码。在走这条路之前,确保确定安全性不是问题。