JSON数据最紧凑的URL编码?

前段时间,我看到一个网站,把游戏重放数据编码成unicode字符,以便你可以复制和粘贴地址与朋友分享。 我基本上想做同样的事情 – 我有一些JavaScript对象中的数据,我想把它放到地址栏中。

我知道我可以使用jQuery.param或类似的东西,但我想要一个更紧凑的格式。

原来这对Google来说有点棘手。 大部分search结果都会显示url缩写,这是明显不同的。 我不想在我的数据库中存储一个简短的URL以供以后查找。 所有的数据应该在URL本身。

我可以使用什么编码? algorithm的链接或描述是好的,但对Node / JavaScript的支持会更好。

我只需要支持最新版本的Chrome稳定版,所以我不在乎旧版浏览器是否无法处理unicode。 我想我会把数据放在片段部分( #之后),所以我只需要支持适用于这个片段的任何编码规则。 我认为任何事情都可以,不是吗?

你去https://github.com/qntm/base65536&https://www.npmjs.com/package/base65536

Base65536是针对UTF-32编码文本和Twitter进行优化的二进制编码。 这个JavaScript模块base65536是这个编码的第一个实现。

它在前段时间被黑客新闻报道 。

这是一个enapupe的build议的实现:

 import Msgpack from 'msgpack-lite'; import Base65536 from 'base65536'; export function uniencode(obj) { return Base65536.encode(Msgpack.encode(obj)); } export function unidecode(str) { return Msgpack.decode(Base65536.decode(str)); } 

用法:

 let o = {foo:'bar',baz:[1,2,3,4,5],quux:'corge'}; console.log(uniencode(o).length,JSON.stringify(o).length); // 24, 46 

uniencodeuniencode长度的一半JSON.stringify ,根据Twitter(甚至更lessJSON.stringify没有正确统计JSON.stringify计数以上为15个字符)。 更好的测量是:

 function len(str) { return [...str].length; } 

分别给出15和46。