Javascript 如何在D3 svg.text对象中显示希腊字母?

Javascript 如何在D3 svg.text对象中显示希腊字母?,javascript,svg,d3.js,Javascript,Svg,D3.js,我用的是D3,想加上希腊字母delta 这在my HTML的标记中: <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initi

我用的是D3,想加上希腊字母delta

这在my HTML的标记中:

<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
在这一行中,我遇到了一些问题:

return Math.round(delta * 10) / 10 + "%";
我尝试过的事情:

return Math.round(delta * 10) / 10 + "%Δ"; //Displays ? instead of Δ
return Math.round(delta * 10) / 10 + "%&Delta;" // Displays the string literal &Delta;
return Math.round(delta * 10) / 10 + "%&#916;;" // Displays the string literal &#916;
我真的不知道该怎么做。如果重要的话,字体是无衬线的

我不太熟悉SVG文本,但我只想写希腊字母delta

  • 为什么不使用unicode?

    • UTF8或UTF16
    • 并将
      Δ
      编码为unicode 0394十六进制
    • 如果您没有能够做到这一点的工具,可以使用十六进制编辑器
  • 可以使用INCSKAPE

    • 这是我在谷歌找到的第一个有效链接
  • [Edit2]

    <?xml version="1.0" encoding="UTF-16"?>
    <svg width="512" height="512" viewBox="0 0 512 512" fill="none" stroke="none" stroke-width="1px" transform="matrix(1,0,0,1,0,0" >
    <text x="5" y="20" font-family="Verdana" font-size="16" fill="blue">
    Greek alphabet test
    <tspan x="5" dy="+20">
    ΑΒΓΔ
    </tspan>
    </text>
    </svg>
    
    
    希腊字母测验
    ΑΒΓΔ
    
    • 在UTF-8中,
      ΒΓΔ
      在十六进制视图中编码为
      CE,91,CE,92,CE,93,CE,94
    • 在UTF-16中,
      ΒΓΔ
      在十六进制视图中编码为
      91,03,92,03,93,03,94,03
    • 不要忘记,在UTF-16中,每个字符是一个16位(2字节)
    • 在UTF-8中,除希腊字母外,所有字母均为1字节/字符
    • 希腊字符本身是2字节/字符
    这起作用了:

    return Math.round(delta * 10) / 10 + "% \u0394";
    

    有两种解决方案可行(因为HTML显然不可行):

    • 用Javascript编码增量,如下所示:
    return Math.round(delta*10)/10+“%\u0394”

    这是非常可靠的,但不太可读

    • 对文件本身中的增量进行编码:
    返回数学四舍五入(δ*10)/10+%Δ

    这取决于始终正确处理文件编码(在源代码管理、部署和web服务器中),因此它是可读的,但很脆弱

    妥协可能是

    const DeltaLetter = '\u0394';
    ...
    return Math.round(delta * 10) / 10 + "% " + DeltaLetter;
    

    你试过“\u0394”吗?@Malvolio谢谢!那很有效@Malvolio(+1)我忘了这个页面将文本转换为自己的unicode格式。因此,我修改了示例,添加了UTF-8和UTF-16的十六进制视图(最终在UTF-8中也可以使用它),并编写了一个
    const DeltaLetter = '\u0394';
    ...
    return Math.round(delta * 10) / 10 + "% " + DeltaLetter;