使用 localStorage 进行 JavaScript 字符串压缩

标签 javascript unicode compression base64 local-storage

我在项目中使用localStorage,它需要存储大量数据,大部分是int、bool和string类型。我知道 javascript 字符串是 unicode,但是当存储在 localStorage 中时,它们仍然保持 unicode 吗?如果是这样,有没有办法可以压缩字符串以使用 unicode 字节中的所有数据,或者我应该只使用 base64 并减少压缩?所有数据都将存储为一个大字符串。

编辑:现在我想了一下,base64根本不会做太多压缩,数据已经是base 64,a-zA-Z0-9 ;:是65个字符。

最佳答案

“当存储在 localStorage 中时,它们是否保持 unicode 格式?”

Web Storage working draft将本地存储值定义为 DOMString。 DOMStrings are defined作为使用 UTF-16 encoding 的 16 位单元序列。所以是的,它们仍然是 Unicode。

有没有办法可以压缩字符串以使用 unicode 字节中的所有数据...

“Base32k”编码应该为每个字符提供 15 位。 Base32k 类型编码利用 UTF-16 字符中的完整 16 位,但会丢失一点以避免双字字符出错。如果您的原始数据是 Base64 编码的,则每个字符仅使用 6 位。将这 6 位编码为 base32k 应该将其压缩至原始大小的 6/15 = 40%。请参阅http://lists.xml.org/archives/xml-dev/200307/msg00505.htmlhttp://lists.xml.org/archives/xml-dev/200307/msg00507.html .

为了进一步减小大小,您可以将 Base64 字符串解码为完整的 8 位二进制文​​件,使用一些已知的压缩算法对其进行压缩(例如,参见 javascript implementation of gzip ),然后对压缩输出进行 Base32k 编码。

关于使用 localStorage 进行 JavaScript 字符串压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865185/

相关文章:

c# - 大文件的 GZipStream 不能正常工作

c# - 有没有办法压缩内存中的对象并透明地使用它?

javascript - 处理主干中的移动屏幕方向

javascript - 嵌入 3D 模型查看器

javascript - flex : 1 上下滑动功能问题

unicode - 是否有与表情符号宽度匹配的空白 Unicode 字符?

javascript - ReactJS - 在 sibling 之间传递引用

java - 如何将sqlite FTS查询中的字节偏移量转换为java中的字符偏移量

php - 引用 : Why are my "special" Unicode characters encoded weird using json_encode?

c++ - 在这种情况下我的压缩率可以低于 6.25% 吗?