首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS,basE91,和小endian

NodeJS,basE91,和小endian
EN

Stack Overflow用户
提问于 2012-07-03 03:47:52
回答 3查看 1.9K关注 0票数 4

如何使用basE91将下面的字符串解码为可读文本?

代码语言:javascript
复制
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表,我设法将上面的字符串转换为十六进制字符串。

六角弦

代码语言:javascript
复制
5668557210457684246110336890114713568693668683768671151081161086669112501096769948510868691567726969697069687169676010861108104694046751056911811383106696610769661086966109696682109810937693312381386968103784069715875416969426969436966120109121109717012312585727040418173701637687470697570667670689110993109109705974711107055938111170501127066113706711470668711088104370684470694670664770695870685970675011051110

然后我把它输入缓冲器

代码语言:javascript
复制
var buf = new Buffer(hex, 'hex');
console.log(buf.toString('utf8'));

这给了我:

代码语言:javascript
复制
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对象..。

EN

回答 3

Stack Overflow用户

发布于 2012-07-09 21:34:49

有相当紧凑的基于github的编解码器。我认为这应该很容易翻译成JS。

直接链接到源文件

票数 2
EN

Stack Overflow用户

发布于 2012-07-09 21:23:22

简单地说,在node.js中没有简单/快速的方法可以做到这一点(而且显然也没有模块)。

添加到@bryanmac的注释中,使用base91作为起点(主源文件只有160行包含版权!),您可以将数据存储在node.js缓冲区中,一旦从base91转换为字节,就可以使用内置的node.js方法将数据转换为字符串。

票数 0
EN

Stack Overflow用户

发布于 2017-05-28 07:41:59

“如何使用Javascript/NodeJS/CommnJS解码basE91?”

我将原始basE91迁移到JavaScript中,目前支持StringBufferStream。您可以尝试一下:Equim-chan/base91 91

首先我们需要一张桌子:

代码语言:javascript
复制
const table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+,./:;<=>?@[]^_`{|}~"';

encode的核心部分

代码语言:javascript
复制
// `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 string

decode的核心部分

代码语言:javascript
复制
// `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表中的*)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11304190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档