代码之家  ›  专栏  ›  技术社区  ›  Tom

ASCII文本字符串缩短

  •  -1
  • Tom  · 技术社区  · 15 年前

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

    • 需要澄清的是,正如我所说的,安全性不是目的,只是为了伪装字符串并保持其长度(或缩短它)。Base64是最好的例子,但它会使字符串变长。ROT13是整洁的,但不包括所有ASCII字符,只有字母。
    5 回复  |  直到 15 年前
        1
  •  1
  •   Jens Björnhager    15 年前
        2
  •  2
  •   Stefan Kendall    15 年前

        3
  •  1
  •   paxdiablo    15 年前

    既然ROT13被淘汰是因为它只影响alpha,为什么不在更大的字符集上实现一些东西呢。建立一个 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.
    
        4
  •  1
  •   Roland Illig    15 年前

    我不知道你到底想压缩什么。如果是字符串的长度(如 String.length() ,可以将两个ASCII字符压缩为一个Unicode字符。就像一根绳子 hello, world \u6865\u6c6c\u6f2c\u206f\u6f72\u6c64 (6个字符)。你必须非常小心,虽然你不产生无效字符,如 \uFFFF 你总是可以从压缩的字符串回到未压缩的字符串。

        5
  •  0
  •   Eric J.    15 年前

    你可以用一个简单的 substitution cipher . 这里有一个 example in JavaScript .

    注意,有一些工具可以破解替换密码。制作 当然 在走这条路之前,安全不是问题。