上标,使用unicode&;Javascript?

上标,使用unicode&;Javascript?,javascript,canvas,unicode,Javascript,Canvas,Unicode,我想在HTML画布中显示带有指数的数字。由于context.fillText(…)不支持HTML标记,我想我应该尝试使用unicode。结果与我预期的不完全一样,因为数字1-3的行为方式与其他上标数字不同。我的代码如下: // Only supports integers and will round any non-integers function superscriptNumber(intNumber) { var text = '';

我想在HTML画布中显示带有指数的数字。由于context.fillText(…)不支持HTML标记,我想我应该尝试使用unicode。结果与我预期的不完全一样,因为数字1-3的行为方式与其他上标数字不同。我的代码如下:

   // Only supports integers and will round any non-integers
   function superscriptNumber(intNumber) {
        var text = '';          
        var number = Math.round(intNumber);
        var supers = '⁰¹²³⁴⁵⁶⁷⁸⁹'.split('');
        if (intNumber === 0) {
            text = supers[0] ;
        } else {
            while (Math.floor(number) > 0) {
                digit = number % 10;
                number = Math.floor(number / 10);
                text =  supers[digit] + text;
            }        
        }
        return text;
   }
如果我这样做了

   var text = '10 '+ superscriptNumber(1265);
   ctx.fillText(text, x, y);

然后我看到1和2在同一个级别,6和5略加上标。我怀疑他可能是因为字体的原因,字体对它们的处理略有不同(1、2、3由于某种原因不在同一个unicode范围内)?是否有办法改进我的代码,以确保字体之间的一致性?

是的,这似乎是字体/unicode支持的问题。你可以继续尝试使用特定的字体,但我想你只需要在不同的位置用较小的字体打印数字。我刚刚浏览了windows机器的所有标准web字体,结果不一致。有些字体只有1,2,3和其他字体的数字(在同一系列中相关),有些字体缺少其他数字,有些字体缺少大部分数字,但缺少一些,有些字体拥有所有上标数字。最好是自己编写fillText函数,自己编写上标。是的,这似乎是字体/unicode支持的问题。你可以继续尝试使用特定的字体,但我想你只需要在不同的位置用较小的字体打印数字。我刚刚浏览了windows机器的所有标准web字体,结果不一致。有些字体只有1,2,3和其他字体的数字(在同一系列中相关),有些字体缺少其他数字,有些字体缺少大部分数字,但缺少一些,有些字体拥有所有上标数字。最好的办法是编写自己的fillText函数,然后自己编写上标。