包含所有ascii字符的字符串

Gjo*_*gji 20 javascript string ascii

我想在JavaScript中创建一个包含所有ascii字符的字符串.我怎样才能做到这一点?

Stu*_*ley 71

var s = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
Run Code Online (Sandbox Code Playgroud)

  • @Albert Hendriks*不*包含所有Unicode代码点.它甚至不包括前两个[块](https://en.wikipedia.org/wiki/Unicode_block). (4认同)
  • 我一直在寻找unicode,所以其他人也可能是:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïð (3认同)
  • 我只想要一个包含所有 ASCII 可打印字符的字符串文字。谢谢 [google](https://www.google.com/search?q=all+ascii+characters+in+one+string)。谢谢@StuartP.Bentley。 (3认同)
  • 这个问题非常清楚地要求一个包含所有(打印)**ASCII** 字符的字符串,这是可行的,因为 ASCII 是一个小的固定集。如果您打算涵盖*任何* 字符集*超出* ASCII,您必须了解Unicode 如何对代码点进行分类并针对您的问题使用正确的解决方案。如果您正在寻找“包含所有字符的字符串”,那么您正在做的事情 * 错误 * - 很可能是 * 非常* 错误的事情。 (2认同)

Dec*_*ler 21

我的javascript有点生疏,但是像这样:

s = '';
for( var i = 32; i <= 126; i++ )
{
    s += String.fromCharCode( i );
}
Run Code Online (Sandbox Code Playgroud)

不确定范围是否正确.

编辑:
那么它应该是32到127.调整.

编辑2:
由于char 127也不是可打印字符,我们必须将其缩小到32 <= c <= 126,而不是32 <= c <= 127.

  • @Joachim:我敢打赌他正在寻找"所有可打印的西欧角色"或"我母语中的所有可打印角色".我注意到,"ascii"这个词的定义,尤其是以小写字母呈现时,多年来已经变得有些邋.. (2认同)
  • @YakovL扩展ASCII不是一个字符集.因此,该术语几乎不适用于所有目的.JavaScript使用[Unicode字符集]的UTF-16字符编码(http://www.unicode.org/charts/nameslist/index.html)(Java,.NET,VB4/5/6/A /脚本,...). (2认同)

Guf*_*ffa 5

只需循环字符代码并将每个代码转换为一个字符:

var s = '';
for (var i=32; i<=127;i++) s += String.fromCharCode(i);
Run Code Online (Sandbox Code Playgroud)


Dmi*_*try 5

只是想把它放在这里以供参考。(在我的计算机上生成大约需要 13/100 到 26/100 毫秒)。

var allAsciiPrintables = JSON.stringify((Array.from(Array(126 + 32).keys()).slice(32).map((item) => {
    return String.fromCharCode(item);
})).join(''));
Run Code Online (Sandbox Code Playgroud)

分解:

var allAsciiPrintables = (function() {
    /* ArrayIterator */
    var result = Array(126 + 32).keys();    
    /* [0, 126 + 32] */
    result = Array.from(result);
    /* [32, 126 + 32] */
    result = result.slice(32);
    /* transform each item from Number to its ASCII as String. */
    result = result.map((item) => {
        return String.fromCharCode(item);
    });
    /* convert from array of each string[1] to a single string */
    result = result.join('');

    /* create an escaped string so you can replace this code with the string 
       to avoid having to calculate this on each time the program runs */
    result = JSON.stringify(result);

    /* return the string */
    return result;
})();
Run Code Online (Sandbox Code Playgroud)

最有效的解决方案(如果您确实想在每次脚本运行时生成整个集合,可能是)(在我的计算机上生成大约需要 3/100-35/100 毫秒)。

var allAsciiPrintables = (() => {
    var result = new Array(126-32);
    for (var i = 32; i <= 126; ++i) {
        result[i - 32] = (String.fromCharCode(i));        
    }
    return JSON.stringify(result.join(''));
})();
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这仅比直接分配字符串文字慢 3-10 倍(使用反引号告诉 javascript 避免大多数反斜杠解析)。

var x;
var t;

t = performance.now();
x = '!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~';
t = performance.now() - t;
console.log(t);
Run Code Online (Sandbox Code Playgroud)

.