Проблема понимания 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);
}