是否可以迭代所有unicode字符(UTF-8)?谢谢! 我尝试过使用:
character = String.fromCharCode(i);
但我不确定如何实施它。
答案 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)
答案 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);
}