我有一个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 2中的字符串不是unicode。试试这个:
.. blockdiag::
diagram {
"UberMega" -> "HellSotona" -> "KakoDemon" -> u"Кролики и котятки";
}
刚遇到同样的问题。看起来你在sphinx文档中使用它。
你应该指向你的unicode TrueType字体(把它放在_static
目录中,我选择了一个DejaVuSans。没有理由,它很容易在互联网上找到)。将.ttf
文件复制到静态目录并将此行添加到conf.py
:
import os
blockdiag_fontpath = os.path.abspath(u'_static/fonts/DejaVuSans.ttf')
请注意相对路径前的u
标记。如果项目的路径包含任何非ASCII字符且路径不是unicode字符串,Blockdiag将忽略此项。