如何遍历所有 Unicode 字符?

How to iterate over over all Unicode characters?

是否可以遍历所有 Unicode 字符 (UTF-8)?谢谢! 我试过使用:

character = String.fromCharCode(i);

但我不确定如何实现它。

一个 Javascript 字符串的长度为 属性。您可以简单地遍历字符:

for(var i = 0; i < str.length; i++) {
    var char = str[i],
       code = str.charCodeAt(i);
}

根据to the docs, the parameter passed to String.fromCharCode(a) is converted calling ToUint16然后返回所述字符。你可以用任何你想要的数字来调用它,但值将被限制在 0 和 216 或 232

之间
highNumber = 500; //This could go very high
out = ""
for(i=0;i<highNumber;i++){
    out += String.fromCharCode(i);
}
console.log(out);

危险说明 如果您 运行 使用此代码 2^16 您可能会冻结您的标签页或浏览器,它太大了。这是理解您想遍历所有字符而不是给定字符串中的所有字符完全不同。

更合理的highNumber(即500)的示例输出如下:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr
stuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæç
èéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺ
ĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍ
ƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠ
ǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdz

UTF-8是一种编码! JavaScript 个字符串是 (mostly) encoded in UTF-16. Encoding is only important if you’re working in an environment that doesn’t support ES6’s String.fromCodePoint。使用 ES6 从代码点获取字符串:

var s = String.fromCodePoint(codePoint);

不使用 ES6,对 U+10000 及以后的字符使用 UTF-16 surrogate pair

var s;

if (codePoint < 0x10000) {
    s = String.fromCharCode(codePoint);
} else {
    var offset = codePoint - 0x10000;
    s = String.fromCharCode(0xd800 + (offset >> 10),
                            0xdc00 + (offset & 0x3ff));
}

代码点范围从 U+0000 到 U+10FFFF(1 114 112 值),但并非该范围内的所有内容都是有效的 Unicode 字符。您可以从 http://www.unicode.org/Public/8.0.0/ucd/UnicodeData.txt 得到一个 table 并提取您真正想要迭代的字符。

我认为这可能会准确定义要迭代的内容:

(添加此答案是因为与某些 Google 搜索相关)

在可能包含 UTF-8 多代码点字符(即表情符号或非拉丁字母)的字符串上逐字符迭代的正确方法是 Array.from():

const bugs = ''

// WRONG, does not account for characters with > 2 Unicode code points
bugs.split('')
// Array(6) [ "\ud83d", "\udc1b", "\ud83d", "\udc1b", "\ud83d", "\udc1b" ]

// CORRECT
Array.from(bugs)
// Array(3) [ "", "", "" ]

然后,像迭代任何普通数组一样进行迭代(建议:map/forEach)。

更多信息:https://medium.com/@giltayar/iterating-over-emoji-characters-the-es6-way-f06e4589516