在.net服务器上压缩/解压缩在客户端使用lz-string.js编码的字符串

Compress/decompress string on .NET server that was encoded with lz-string.js on client

本文关键字:lz-string js 编码 字符串 客户端 服务器 net 压缩 解压缩      更新时间:2023-09-26

我正在使用lz-string.js的LZString.compressToBase64函数,需要在服务器端解压/压缩数据。

显而易见的解决方案似乎是lz_string_csharp,但我担心的是

这句话:

如果你只使用常规的Javascript 'compress'函数,那么根据字符串中的数据,它将无法在c#端正确解压缩。

但是,如果你正在使用c#版本内置的'compress'函数,那么你应该可以使用包含的常规'decompress'函数。

和关于这个报告的问题:c#版本的compressToBase64

你给出的链接中的完整描述说,你应该能够使用'compressToUTF16',它将始终工作,而不仅仅是'compress',这并不总是工作。

我已经亲自测试过了,看到它可以工作。

(虽然我改变了Context_Compress_Data。str字段从字符串转换为c#文件中的StringBuilder,因为它运行太慢了。在此之后,一个8mb的JSON文件压缩到原始大小的7%只需要8秒。

我们通过在下面两行(stringbuilder版本之前的原始文件第580行)之间添加enc1 = enc2 = enc3 = enc4 = 0;来修复这个问题

据我所知,这个bug是由enc1, enc2等的值引起的…在每次循环开始时没有重置,所以有时循环的新迭代会得到与前一轮不同的值。

  i += 3;
                    enc1 = enc2 = enc3 = enc4 = 0;
                    enc1 = (int)(Math.Round(chr1)) >> 2;