【问题标题】:Sphinx and blockdiag: non-English characters give UnicodeEncodeErrorSphinx 和 blockdiag:非英文字符给出 UnicodeEncodeError
【发布时间】:2018-02-28 16:04:26
【问题描述】:

我有一个 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


【解决方案1】:

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

.. blockdiag::

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

【讨论】:

  • 我试过了。没有什么变化。看起来 blockdiag 不吃你的标记。
  • 给出错误:C:\Projects\PAT\PyPhased\docs\simple_pulse_radar.rst:6: WARNING: undecoded source characters, replace with "?": ' "Rectangular Waveform" -> "Transmitter " -> "散热器" -> "可用空间" -> "目标" -> unicode("\xca\xf0\xee\xeb\xe8\xea>>>\xe8
  • 如果将它添加到文件顶部会怎样? '# -- 编码:utf-8 --'。可能还需要将其添加到 conf.py 中/而不是编辑:每组破折号中间有一个星号,我不知道为什么它没有显示
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多