无法使用UTF-8编码的图像文件名来自定义节点形状。

5

我已经将DOT代码文件保存为UTF-8编码。但是它不能输出具有自定义形状的PNG图像文件。是否有一个示例来演示graphviz用户指定字符集使用?

演示代码在这里。

digraph G {

    bgcolor=black;
    edge [arrowsize=1, color=red];

    node [penwidth=1, color=white, labelloc=b];

    BR [shape=box, label="BR", charset="utf-8", image="图元.png"];
    DS [shape=plaintext, fontname="SimSun", fontcolor=white, fontsize=18, label="测点"];
    BR -> DS[dir=forward];
}

以下是命令行的结果列表。

C:\dot>dot -Gcharset=utf-8 -Tpng -o demo.png demo.dot
Warning: No such file or directory while opening 鍥惧厓.png
Warning: No or improper image="鍥惧厓.png" for node "BR"

GraphViz使用iconv进行编码转换。为什么不能使用UTF-8图像文件名? - allenchen
1
它在我的Mac OS X 10.6.8上的Mac OS Extended(Journaled)文件系统上运行良好。您使用的是什么操作系统,文件系统上的文件是什么类型?Graphviz默认使用UTF-8编码来解析图形,因此您不需要在命令行中指定它,也不能在节点定义中指定它。但它可能没有尝试转换文件名编码。此外,您在这里提出了多个问题;您应该在每个Stack Overflow帖子中只提出一个问题。 - ryandesign
2个回答

0

整个过程中存在一个编码问题。源代码中的图像文件名为图元.png,但是当Graphviz读取它时,看到的却是鍥惧厓.png

这表明您没有将文件保存为UTF-8格式,或者您的操作系统的默认编码不是UTF-8。在文档中,我找不到告诉Graphviz源代码编码的方法。选项charset仅在“将字符串输入解释为文本标签时”使用(请参见“字符编码”)。

因此,这不会解决您的问题。一种解决方案是用HTML实体替换Unicode字符。所以您可以使用"圖元.png",但是再次,文档上说“在标签评估过程中,这些实体将被转换”,这可能意味着它们在其他地方不会被转换。


0
我在Windows 10上遇到了这个问题,通过在Windows控制面板中勾选“Beta: 使用Unicode UTF-8进行全球语言支持”复选框来解决了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接