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"
不起作用,但是,我怎么能这样做?谢谢
问题是你正在使用的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位整数).