Проблема понимания холста fillText с символами Юникода - PullRequest
14 голосов
/ 17 августа 2011

Я хочу отобразить специальные символы в шрифте, используя canvas fillText.Код в основном:

canvas = document.getElementById("mycanvas");
context = canvas.getContext("2d");

hexstring = "\u00A9";
//hexstring = "\\u" +"00A9";

context.fillText(hexstring,100,100);

Если я использую первый hexstring, он работает, и я получаю символ авторского права.Если я использую второй, он просто отображает \u00A9.Поскольку мне нужно перебирать числа, мне нужно использовать второе, чтобы отобразить все специальные символы шрифта.Я использую UTF-8.Что я делаю не так?

Ответы [ 2 ]

28 голосов
/ 17 августа 2011

Используйте 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);
0 голосов
/ 17 августа 2011

рабочий пример

http://jsfiddle.net/sbYPj/

Eval time:)

итерация по num, и это будет прекрасно работать

var num = value;
var uni = '"\\u' + num+'"';
var result;
if (/^[A-F\d]{4}$/.test(num)) 
{
  result = eval(uni);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...