Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解带有unicode字符的文本时出现问题_Javascript_Html_Html5 Canvas - Fatal编程技术网

Javascript 理解带有unicode字符的文本时出现问题

Javascript 理解带有unicode字符的文本时出现问题,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,我想使用canvasfillText在字体中显示特殊字符。守则基本上是: canvas = document.getElementById("mycanvas"); context = canvas.getContext("2d"); hexstring = "\u00A9"; //hexstring = "\\u" +"00A9"; context.fillText(hexstring,100,100); 如果我使用第一个hexstring,它可以工作,我得到版权符号。如果使用第二个,它

我想使用canvas
fillText
在字体中显示特殊字符。守则基本上是:

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

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

context.fillText(hexstring,100,100);

如果我使用第一个
hexstring
,它可以工作,我得到版权符号。如果使用第二个,它只显示
\u00A9
。因为我需要遍历这些数字,所以我需要使用第二个数字来显示字体的所有特殊字符。我正在使用utf-8。我做错了什么?

工作示例

评估时间:)

迭代num,这将很好地工作

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

使用
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);
函数makeRange(n0,n1){
var a=[];

因为(;n0Undone down vote,因为正则表达式检查消除了即时漏洞,但是
eval
仍然是缓慢、丑陋、危险的,最好避免。我已经用了一天所有的向上投票;我会尽量记住在四小时后回来。当然,StackOverflow再次拯救了我。谢谢bobince!