警告节点无法识别的graphviz

warning node unrecognized graphviz

我正在使用 graphviz 绘制节点

每个节点由一个长字节字符串标识,如

J0b'\xee\x07\x9a\xbe\xd8\xa0\x8c@\nE\xc8\xcfwTT\x8a\x97\xad_\x9d\x0b\x85\x82\xb8\xe4, port 6\x0f\x17\xe1\xfbX'

所以创建一个节点看起来像这样

g.node("J0b'\xee\x07\x9a\xbe\xd8\...", label="first node")

但后来我收到警告

Warning: node J0b'\xee\x07\x9a\xbe\xd8\xa0\x8c@\nE\xc8\xcfwTT\x8a\
x97\xad_\x9d\x0b\x85\x82\xb8\xe4, port 6\x0f\x17\xe1\xfbX' unrecognized

一直在网上查找错误是什么端口。奇怪的是只有少数节点有这个错误,其他节点打印正确

所以生成的节点看起来像这样

而不是 "first node" 它打印出 "J0b'\xee\x07\x9a\xbe\xd8..."

dot language grammar 为节点 ID 声明以下内容:

An ID is one of the following:

  • Any string of alphabetic ([a-zA-Z0-7]) characters, underscores ('_') or digits ([0-9]), not beginning with a digit;
  • a numeral [-]?(.[0-9]+ | [0-9]+(.[0-9]*)? );
  • any double-quoted string ("...") possibly containing escaped quotes ('")1;
  • an HTML string (<...>).

由于您示例中的 ID 还包含逗号和空格等字符,因此 ID 应该用双引号引起来。

例如 J0b'\xe4, port 6\x0f' 用作 id 时应为 "J0b'\xe4, port 6\x0f'"(带双引号)。

此外,当使用库创建图形时,这些 ID 必须使用库语言的适当转义序列进行转义。

g.node(""J0b'\xe4, port 6\x0f'"", "label") 因此可能应该是 g.node("\"J0b'\xe4, port 6\x0f'\"", "label").