Javascript unicode字符循环

Arn*_*rno 1 javascript unicode

我正在尝试创建一个循环,以了解unicode中的某些字符范围.例如,如果cyrrilic字母的范围是1040-1103(根据.charCodeAt()方法),我想创建一个循环,从该范围输出unicode字符.到目前为止,我有这个:

    for (var i = 1040; i < 1104; i++){
    document.write("\u" + i.toString(16) + "<br />");
    }
Run Code Online (Sandbox Code Playgroud)

从我得到的"\u0410",当.charCodeAt()输出十进制值时,通过(cyrrilic"A")输出一个unicode字符需要一个字符的十六进制代码.我用.toString(16)这里将十进制值转换为十六进制,但由于某种原因它不输出任何东西,我该怎么做才能将"\ u"连接到"0410"?

PS:我尝试添加"\u0" + i.toString(16),因为它似乎"\u410"不起作用,但是,我怎么能这样做?谢谢

T.J*_*der 7

问题是你正在使用的Unicode转义序列必须字符串文字内."\u0410"并且"\u" + "0410"是不一样的东西.第一个是包含Unicode转义序列的字符串文字.第二个是带有无效转义序列的字符串文字,然后我们尝试将字符串追加"0410"到.

要获取给定Unicode"字符"(大多数为*)的单个字符的字符串,请使用String.fromCharCode:

document.write(String.fromCharCode(i) + "<br>");
Run Code Online (Sandbox Code Playgroud)

*为什么我上面说的"大部分":JavaScript字符串不是由Unicode字符组成的(尽管可能是令人惊讶的,因为它们通常看起来很像).它们由UTF-16 代码单元组成.(代码单元与代码点不同,"代码点"基本上是"字符"的Unicode,但代码单元可能只是字符的一部分.)UTF-16是使用Unicode的"转换" 16位代码单元.对于大量文本(基本多语言平面中的任何内容),单个UTF-16代码单元可以完全表示Unicode字符,但某些字符需要两个代码单元(任何其他平面中的代码单元).这些字符在JavaScript字符串中显示为两个"字符".更多关于转换的Unicode FAQ以及之前的链接.String.fromCharCode大于0xFFFF的值将无法正常工作(例如,大于无符号的16位整数).

  • 沉闷的迂腐:没有`&#`字符引用的`document.write`正在编写HTML,所以可能会破坏像`<`和`&`这样的特殊字符.带有字符引用的`document.write`对于U + 0080到U + 009F范围内的字符失败(因为在HTML5中出于兼容性原因,此范围中的字符引用映射到Windows代码页1252代码).ECMAScript 6中的`String.fromCodePoint`将避免将来出现UTF-16问题.HTML4确实支持Unicode,它仍然是基于ISO-8859-1的3.2. (2认同)