使用unicode字符理解canvas fillText的问题

时间:2011-08-17 18:22:53

标签: javascript html5 html5-canvas

我想使用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 个答案:

答案 0 :(得分:28)

使用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);

答案 1 :(得分:0)

工作示例

http://jsfiddle.net/sbYPj/

评估时间:)

迭代数字,这将正常工作

var num = value;
var uni = '"\\u' + num+'"';
var result;
if (/^[A-F\d]{4}$/.test(num)) 
{
  result = eval(uni);
}