Sphinx和blockdiag:非英文字符给出UnicodeEncodeError

时间:2015-07-01 11:13:10

标签: python python-sphinx

我有一个用Sphinx编译的RST文件。

我有一个方框图。

我想给它的一些节点提供非英文名称。

.. blockdiag::

   diagram {
     "UberMega" -> "HellSotona" -> "KakoDemon" -> "Кролики и котятки";
   }

唉,它给了我一个错误:

  File "C:\Python2\lib\site-packages\blockdiag\imagedraw\png.py", line 282, in textlinesize
    size = self.draw.textsize(string, font=None)
  File "C:\Python2\lib\site-packages\PIL\ImageDraw.py", line 282, in textsize
    return font.getsize(text)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-5: ordinal not in range(256)
WARNING: blockdiag error: UnicodeEncodeError caught (check your font settings)

我该如何应对?

2 个答案:

答案 0 :(得分:0)

默认情况下,python 2中的字符串不是unicode。试试这个:

.. blockdiag::

diagram {
 "UberMega" -> "HellSotona" -> "KakoDemon" -> u"Кролики и котятки";
}

答案 1 :(得分:0)

刚遇到同样的问题。看起来您在sphinx文档中使用它。

你应该指向你的unicode TrueType字体(把它放在_static目录中,我选择了一个DejaVuSans。没有理由,它很容易在互联网上找到)。将您的.ttf文件复制到静态目录,并将此行添加到conf.py

import os
blockdiag_fontpath = os.path.abspath(u'_static/fonts/DejaVuSans.ttf')

请注意相对路径前的u标记。如果项目的路径包含任何非ASCII字符且路径不是unicode字符串,Blockdiag将忽略此项。