Javascript unicode字符循环

时间:2014-04-04 11:33:47

标签: javascript unicode

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

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

从我所得到的,通过"\u0410"(cyrrilic&#34; A&#34;)输出一个unicode字符需要一个字符的十六进制代码,当.charCodeAt()输出时小数值。我在这里使用.toString(16)将十进制值转换为十六进制,但由于某种原因它没有输出任何内容,我该怎么做才能连接&#34; \ u&#34;用&#34; 0410&#34;?

P.S:我尝试添加"\u0" + i.toString(16),因为似乎"\u410"无法正常工作,但是,我怎么能这样做呢?感谢

1 个答案:

答案 0 :(得分:7)

问题是你正在使用的Unicode转义序列必须在里面字符串文字。 "\u0410""\u" + "0410"不是一回事。第一个是包含Unicode转义序列的字符串文字。第二个是带有无效转义序列的字符串文字,然后我们尝试将字符串"0410"附加到。

要获取给定Unicode“字符”( *)的单个字符的字符串,请使用String.fromCharCode

document.write(String.fromCharCode(i) + "<br>");

*为什么我上面说“大多数”:JavaScript字符串不是由Unicode字符组成的(虽然可能会令人惊讶,因为它通常似乎就像它们一样) 。它们由UTF-16 代码单元组成。 (代码单元与代码 point 不同,“代码点”基本上是“字符”的Unicode,但是代码单元可能只是字符的一部分。)UTF-16是使用16位代码单元的Unicode的“转换”。对于 lot 的文本(Basic Multilingual Plane中的任何内容),单个UTF-16代码单元可以完全表示Unicode字符,但某些字符需要两个代码单元({{3 }})。这些字符在JavaScript字符串中显示为两个“字符”。更多关于转换的any of the other planes以及之前的链接。对于大于0xFFFF的值(例如,大于无符号的16位整数),String.fromCharCode将无法正常工作。