【问题标题】:Problem understanding canvas fillText with unicode characters使用 unicode 字符理解画布 fillText 的问题
【发布时间】:2011-10-29 04:21:26
【问题描述】:

我想使用画布fillText 以字体显示特殊字符。代码基本上是:

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

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

context.fillText(hexstring,100,100);

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

【问题讨论】:

    标签: javascript html html5-canvas


    【解决方案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);
    

    【讨论】:

    • 当然,StackOverflow 又来救我了。谢谢bobince!
    【解决方案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);
    }
    

    【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2011-09-11
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多