如何使用basE91将下面的字符串解码为可读文本?
8D7Hh-9D*.n-!DZrG-#DE-$DD-%DC-sl-tl-BEp2m-CE^Ul-DE}CH-EEE-FED-GEC-<l-=l-hE(.K-iEvqS-jEB-kEB-lEB-mEB-Rm-Sm-%E!{Q-&EDgN-(EG:K-)EE-*EE-+EB-xm-ym-GF{}U-HF()Q-IFt%D-JFE-KFB-LFD-[m-]m-mF;JG-nF7]Q-oF2-pFB-qFC-rFB-Wn-Xn-+FD-,FE-.FB- FE-:FD-;FC-2n-3n-*编辑*
使用basE91表,我设法将上面的字符串转换为十六进制字符串。
六角弦
5668557210457684246110336890114713568693668683768671151081161086669112501096769948510868691567726969697069687169676010861108104694046751056911811383106696610769661086966109696682109810937693312381386968103784069715875416969426969436966120109121109717012312585727040418173701637687470697570667670689110993109109705974711107055938111170501127066113706711470668711088104370684470694670664770695870685970675011051110然后我把它输入缓冲器
var buf = new Buffer(hex, 'hex');
console.log(buf.toString('utf8'));这给了我:
VhUr►Ev?$a►3h?◄G‼V??f??v?q§►?▬►?f?↕P►?v?Hhi↕Vw&???♠??▬?va►?♦i@Fu►V?↑◄81♠if►v?if►??h! ?►??1#?8ih►7?♠?§?T▬??&??6?a ►?!►?↨☺#↕XW'♦♦↑↨7☺▬7htpiupfvph?►?1 ►?♣?G◄►p U??◄↨♣☺↕pf◄7♠q¶pf??►CphDpiFpfGpiXphYpgP◄♣◄►我怎么才能把它变成我能用的东西呢?我怀疑这是JSON对象..。
发布于 2012-07-09 21:34:49
有相当紧凑的基于github的编解码器。我认为这应该很容易翻译成JS。
发布于 2012-07-09 21:23:22
简单地说,在node.js中没有简单/快速的方法可以做到这一点(而且显然也没有模块)。
添加到@bryanmac的注释中,使用base91作为起点(主源文件只有160行包含版权!),您可以将数据存储在node.js缓冲区中,一旦从base91转换为字节,就可以使用内置的node.js方法将数据转换为字符串。
发布于 2017-05-28 07:41:59
“如何使用Javascript/NodeJS/CommnJS解码basE91?”
我将原始basE91迁移到JavaScript中,目前支持String、Buffer和Stream。您可以尝试一下:Equim-chan/base91 91
首先我们需要一张桌子:
const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"';encode的核心部分
// `raw` is the input, asserted as `Buffer`
const len = raw.length;
let ret = '';
let n = 0;
let b = 0;
for (let i = 0; i < len; i++) {
b |= raw[i] << n;
n += 8;
if (n > 13) {
let v = b & 8191;
if (v > 88) {
b >>= 13;
n -= 13;
} else {
v = b & 16383;
b >>= 14;
n -= 14;
}
ret += table[v % 91] + table[v / 91 | 0];
}
}
if (n) {
ret += table[b % 91];
if (n > 7 || b > 90) ret += table[b / 91 | 0];
}
return ret; // basE91 encoded stringdecode的核心部分
// `raw` is the input, asserted as `String`
const len = raw.length;
const ret = [];
let b = 0;
let n = 0;
let v = -1;
for (let i = 0; i < len; i++) {
const p = table.indexOf(raw[i]);
if (p === -1) continue;
if (v < 0) {
v = p;
} else {
v += p * 91;
b |= v << n;
n += (v & 8191) > 88 ? 13 : 14;
do {
ret.push(b & 0xff);
b >>= 8;
n -= 8;
} while (n > 7);
v = -1;
}
}
if (v > -1) {
ret.push((b | v << n) & 0xff);
}
return Buffer.from(ret); // basE91 decoded Buffer上面是用于标准basE91编码/解码的,但是正如@blahdiblah所提到的,您显然从服务器收到了一个非标准的basE91编码字符串(没有*,也没有stardard表中的*)。
https://stackoverflow.com/questions/11304190
复制相似问题