简单的压缩算法 - 如何避免标记字符串?

Simple compression algorithm - how to avoid marker-strings?

我试图想出一个明文字符串压缩算法,例如

AAAAAAAABB -> A@8BB

其中n个符号y写成

y@n

问题是:如果我需要压缩字符串 "A@8" 怎么办?这会使解压算法感到困惑,认为原始输入是 "AAAAAAAA" 而不是 "A@8".

我该如何解决这个问题?我正在考虑使用 "marker" 字符而不是 @,但是如果我想让算法处理二进制数据怎么办?我想在那种情况下没有可以使用的标记字符

一个简单的解决方案是 escaping:您可以用 @@ 表示源中的每个 @。 每次遇到 @ 时,您都会向前看一个字符,然后找到一个数字(重复前一个字符)或另一个 @(字面意思是 @)。

一个变体会将每个 @ 编码为 @@1,这将非常适合您当前的方案并允许将 n 个连续的 @ 编码为 @@n