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

问题描述 投票:1回答:2

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

我有一个方框图。

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

.. 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)

我怎么能应付呢?

python python-sphinx
2个回答
0
投票

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

.. blockdiag::

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

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将忽略此项。

© www.soinside.com 2019 - 2024. All rights reserved.