在JavaScript中编码为字母数字

在JavaScript中编码为字母数字,javascript,node.js,string,encoding,urlencode,Javascript,Node.js,String,Encoding,Urlencode,如果我有一个随机字符串,并希望将其编码为另一个只包含字母数字字符的字符串,那么在JavaScript/NodeJS中最有效的方法是什么 显然,在需要时必须能够将输出字符串转换回原始输入字符串 谢谢 要编码为字母数字字符串,应使用字母数字编码。一些流行的包括十六进制(base16)、base32、base36、base58和base62。使用十六进制的替代方法是因为较大的字母表会导致较短的编码字符串。以下是一些信息: 十六进制之所以流行是因为它非常普遍 Base32和Base36对于不区分大小写

如果我有一个随机字符串,并希望将其编码为另一个只包含字母数字字符的字符串,那么在JavaScript/NodeJS中最有效的方法是什么

显然,在需要时必须能够将输出字符串转换回原始输入字符串


谢谢

要编码为字母数字字符串,应使用字母数字编码。一些流行的包括十六进制(base16)、base32、base36、base58和base62。使用十六进制的替代方法是因为较大的字母表会导致较短的编码字符串。以下是一些信息:

  • 十六进制之所以流行是因为它非常普遍
  • Base32和Base36对于不区分大小写的编码很有用。Base32更易于阅读,因为它消除了一些容易误读的字母。Base32用于游戏和许可证密钥
  • Base58和Base62对于区分大小写的编码很有用。Base58还设计为通过删除一些容易误读的字母,使其更具可读性。Flickr、比特币和其他公司使用Base58
在NodeJS中,十六进制编码是,并且可以按如下方式进行:

// Encode
var hex = new Buffer(string).toString('hex');

// Decode
var string = new Buffer(hex, 'hex').toString();

需要注意的是,其中一些有不同的实现。例如,Flickr和Bitcoin使用不同的Base58实现。

为什么不将这两个字符串存储在不同的变量中,这样就不需要再转换回来呢

要提取所有字母数字,可以使用regex函数,如下所示:

var str='dssldjf348902.-/dsfkjl';
var patt=/[^\w\d]*/g;
var str2 = str.replace(patt,'');

str2
变成
dssldjf348902dsfkjl

您的输入字符串是什么样子?您所说的
仅包含字母数字字符是什么意思?输入字符串是否包含非字母数字字符?是的,输入字符串可以包含任何字符,而输出字符串只能包含字母数字字符。字符串转换的目的是什么?谢谢@Grokify!在您提到的编码器中,哪一个是性能最好(最快)且在JavaScript中本机支持的?十六进制通常是性能最好的,因为它是本机实现的。链接SO答案中的JS实现看起来非常简单,所以我会尝试一下,看看它是否足够快。Base32/36/58/62在需要短编码字符串时很好。您好,Grokify,当您说“十六进制是本机实现的”时,对于从十六进制编码和解码的本机JS方法,您确切地指的是什么?对于JavaScript,您可以使用本机
Number.prototype.toString()
方法和
parseInt()
用于十六进制和转换到Base36的函数。链接的SO答案演示了如何在小型包装器方法中使用这些方法。以下是一些MDN链接:toString();parseInt()谢谢Grokify,如果我理解正确的话,尽管您提到的
toString
parseInt
方法是用来处理数字而不是字符串的。您好@Trung,您建议的不是编码,而是替换。所以它没有回答这个问题。