如何迭代所有 Unicode 字符?

问题描述 投票:0回答:5

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

character = String.fromCharCode(i);

但我不知道如何实施。

javascript unicode iteration
5个回答
11
投票

UTF-8是一种编码! JavaScript 字符串(大部分) 采用 UTF-16 编码。仅当您在不支持 ES6 的

String.fromCodePoint
的环境中工作时,编码才重要。使用 ES6 从代码点获取字符串:

var s = String.fromCodePoint(codePoint);

并且在没有 ES6 的情况下,对字符 U+10000 及以后使用 UTF-16 代理对

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 获取表格并提取您真正想要迭代的字符。


9
投票

对可能包含 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/iteating-over-emoji-characters-the-es6-way-f06e4589516


3
投票

根据文档,传递给String.fromCharCode(a)

的参数通过调用
ToUint16
进行转换,然后返回所述字符。您可以使用任何您想要的数字来调用它,但值将限制在 0 和 2
16 或 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



2
投票

-4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.