Проблема понимания canvas fillText с символами Unicode
Я хочу отображать специальные символы в шрифте, используя canvas fillText
. Код в основном:
canvas = document.getElementById("mycanvas");
context = canvas.getContext("2d");
hexstring = "\u00A9";
//hexstring = "\\u" +"00A9";
context.fillText(hexstring,100,100);
Если я использую первый hexstring
, он работает, и я получаю символ авторского права. Если я использую второй, он отображает \u00A9
. Поскольку мне нужно перебирать числа, мне нужно использовать второй, чтобы отображать все специальные символы шрифта. Я использую utf-8. Что я делаю неправильно?
Ответы
Ответ 1
Используйте String.fromCharCode
, чтобы превратить число в символ.
var c= 169; // 0xA9
context.fillText(String.fromCharCode(c), 100, 100);
Если у вас есть кодировка с шестнадцатеричным кодированием, вы можете сначала разобрать это шестнадцатеричное число:
var h= '00A9';
String.fromCharCode(parseInt(h, 16));
Чтобы создать строку, содержащую диапазон символов, вы можете создать массив чисел, а затем использовать apply
для передачи их в качестве аргументов fromCharCode
. Это быстрее, чем выполнение string= string+String.fromCharCode(c)
для каждого символа отдельно.
function makeRange(n0, n1) {
var a= [];
for (; n0<n1; n++)
a.push(n0);
}
var someChars= makeRange(0xA9, 0xFF);
var stringOfChars= String.fromCharCode.apply(String, someChars);
Ответ 2
рабочий пример
http://jsfiddle.net/sbYPj/
Время ожидания:)
итерации через num, и это будет работать просто отлично
var num = value;
var uni = '"\\u' + num+'"';
var result;
if (/^[A-F\d]{4}$/.test(num))
{
result = eval(uni);
}