如何在JavaScript中使用五位数长的Unicode字符
在JavaScript中,我可以做到这一点:如何在JavaScript中使用五位数长的Unicode字符,javascript,unicode,ecmascript-harmony,Javascript,Unicode,Ecmascript Harmony,在JavaScript中,我可以做到这一点: foo = "\u2669" // 1/4 note 但我不能这么做 foo = "\u1D15D" // full note -five hex digits 它将被解释为“\u1D15”后跟“D” 有什么解决办法吗 更新2012-07-09:现在包括对所有Unicode字符的支持。在中,他们注意到javascript只能自然地处理高达0xFFFF的字符。但是,他们还为fromCharCode提供了一个固定方法的实现,该方法可以实现您想要的功
foo = "\u2669" // 1/4 note
但我不能这么做
foo = "\u1D15D" // full note -five hex digits
它将被解释为“\u1D15”后跟“D”
有什么解决办法吗
更新2012-07-09:现在包括对所有Unicode字符的支持。在中,他们注意到javascript只能自然地处理高达0xFFFF的字符。但是,他们还为fromCharCode提供了一个固定方法的实现,该方法可以实现您想要的功能(如下所示):
我做了一点检查,发现
0x2669
附近没有完整的注释。()
虽然使用0x01D15D
会给我一个未知的unicode字符,但这可能是因为我没有音乐字体。Javascript将尽可能以字节为单位进行解析,0x1D15D
为2.5字节,在其中填充0
将使其成为3字节且可解析
这也非常方便:unicode.org/charts/PDF/U1D100.PDF您可以使用:
function fromOutsideBMP(cp) {
// 0x01D120
var x=cp-0x10000;
var top10=parseInt("11111111110000000000",2);
var end10=parseInt("1111111111",2);
var part1=(x&top10)/1024+0xD800;
var part2=(x&end10)+0xDC00;
var s=String.fromCharCode(part1)+String.fromCharCode(part2);
return s;
}
例如:
>来自外部BMP(0x01d122)
“尝试将unicode放在大括号之间:'\u{1D15D}'
现在,您只需使用String.fromCodePoint()
,如中所述。例如:
>String.fromCodePoint(0x1f0a1)
“背景是我的一个学生正在尝试的一个关于画布上音符的小应用程序:(没什么特别的。他只编写了2个月的程序,每周几个小时。)可能重复的。:“你必须使用代理对”Javascript从1995年之前就仍然停留在Unicode 1中。对于现代文本处理来说,这很糟糕。如果您安装了正确的字体,那么执行String。fromCharCode(0x01D15D)
将为您呈现该字符。您是否有一个这样的字体示例?我很想看到fromCharCode现在支持BMP之外的代码,但我今天读到的所有内容似乎都表明它不支持。(另请参见上文弗里德里克·哈米迪的评论)我刚刚在歌剧中做了一个快速测试,它吐出了“无法渲染字符”的字符。这让我相信你需要字体来呈现角色。下载并运行了测试。fixedFromCharCode有效。参考:这是一条路!更多信息请阅读这里:
function fromOutsideBMP(cp) {
// 0x01D120
var x=cp-0x10000;
var top10=parseInt("11111111110000000000",2);
var end10=parseInt("1111111111",2);
var part1=(x&top10)/1024+0xD800;
var part2=(x&end10)+0xDC00;
var s=String.fromCharCode(part1)+String.fromCharCode(part2);
return s;
}