Javascript:迭代所有unicode?

时间:2015-11-18 22:54:11

标签: javascript unicode iteration

是否可以迭代所有unicode字符(UTF-8)?谢谢! 我尝试过使用:

character = String.fromCharCode(i);

但我不确定如何实施它。

5 个答案:

答案 0 :(得分:3)

UTF-8是一种编码! JavaScript字符串以(mostly)编码为UTF-16。只有当您在不支持ES6 String.fromCodePoint的环境中工作时,编码才是重要的。使用ES6从代码点获取字符串:

var s = String.fromCodePoint(codePoint);

且没有ES6,使用UTF-16 surrogate pair表示字符U + 10000及以上:

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获取一个表,并提取您想要迭代的字符。

答案 1 :(得分:2)

根据to the docs,传递给String.fromCharCode(a)的参数转换为调用ToUint16,然后返回所述字符。您可以使用您想要的任何数字来调用它,但值的上限为0到2 16 或2 32

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

答案 2 :(得分:0)

我认为这可以定义要迭代的内容:

enter image description here

答案 3 :(得分:0)

(添加此答案,因为与某些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

答案 4 :(得分:-3)

Javascript字符串具有length属性。您可以简单地迭代字符:

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