前段时间我看到一个网站将游戏重播数据编码为unicode字符,以便您可以复制并粘贴地址以与朋友分享。我基本上想要做同样的事情 - 我在JavaScript对象中有一些数据,我想把它放到地址栏中。
我知道我可以使用jQuery.param或类似的东西,但我想要一个更紧凑的格式。
事实证明这对谷歌来说有点棘手。大多数搜索结果都会显示URL缩短器,这是截然不同的。我不尝试在我的数据库中存储一个短URL以供以后查找。所有数据都应该在URL本身中。
我可以使用哪种编码方式?算法的链接或描述很好,但Node / JavaScript的要求会更好。
我只需要支持最新版本的Chrome稳定版,所以我不在乎旧浏览器是否无法处理unicode。我想我会将数据放在片段部分(#
之后),所以我只需要支持适用于该片段的任何编码规则。我认为只允许任何事情,不是吗?
答案 0 :(得分:1)
你去https://github.com/qntm/base65536& https://www.npmjs.com/package/base65536
Base65536是针对UTF-32编码的文本和Twitter优化的二进制编码。这个JavaScript模块base65536是这种编码的第一个实现。
答案 1 :(得分:1)
这是enapupe's suggestion的实现:
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
即。 uniencode
大约是JSON.stringify
长度的一半,或者根据推特(.length
并不能正确计算unicode。)Twitter将上述计为15个字符。更好的衡量标准是:
function len(str) {
return [...str].length;
}
分别给出15和46。