Как использовать символы символа Юникода длиной пять цифр в JavaScript
В JavaScript я могу это сделать:
foo = "\u2669" // 1/4 note
Но я не могу этого сделать
foo = "\u1D15D" // full note -five hex digits
Он будет интерпретироваться как "\ u1D15", за которым следует "D"
Есть ли какие-либо обходные пути для этого?
UPDATE 2012-07-09: Предложение для ECMAScript Harmony теперь включает поддержку всех символов Unicode.
Ответы
Ответ 1
В документации MDN для fromCharCode они отмечают, что javascript будет естественно обрабатывать символы до 0xFFFF. Тем не менее, у них также есть реализация фиксированного метода forCharCode, который может делать то, что вы хотите (воспроизведено ниже):
function fixedFromCharCode (codePt) {
if (codePt > 0xFFFF) {
codePt -= 0x10000;
return String.fromCharCode(0xD800 + (codePt >> 10), 0xDC00 + (codePt & 0x3FF));
}
else {
return String.fromCharCode(codePt);
}
}
foo = fixedFromCharCode(0x1D15D);
Ответ 2
Я сделал небольшую проверку, и кажется, что нет полной заметки рядом с 0x2669
. (таблица символов Unicode)
Хотя использование 0x01D15D
дает мне неизвестный символ юникода, это может быть связано с тем, что у меня нет музыкального шрифта. Javascript будет пытаться анализировать в качестве байта, как он может, и 0x1D15D
составляет 2,5 байта, заполняя его с помощью 0
, что сделает его 3 и выполнимым.
Также это было очень удобно: unicode.org/charts/PDF/U1D100.pdf
Ответ 3
Вы можете использовать это:
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;
}
Пример:
> fromOutsideBMP(0x01d122)
"𝄢"
>