Sphinxでビルド時に、日本語ファイル名などをURLエンコーディングしない方法はありますか?
Sphinxでビルドすると、日本語ファイル名を参照している部分が、URLエンコーディングされてHTMLが吐き出されます。
この状態だと、その参照先のファイルにリンクできない状況になります。
このURLエンコーディングを自動に行わない方法を知りたいのですが、どなたかご存知の方は教えていただけるとありがたいです。
具体的には
SphinxでMarkdownを利用した方法で、マニュアルをビルドしています。
日本語のファイル名の画像ファイルだと、ビルド時にWARNING: 画像ファイルが読み込めません
のワーニングが出てbuild
フォルダ内に対象のファイルが移送されない状態です。
ファイル名を全てアルファベットにすれば解決できますが、これも別作業者が既にスクリーンショットを行なった後のものでリネームも大変です。
また、ページ内アンカーリンク(Markdownでいう[ほげ](#ほげ)
)部分も当然<h2>
要素(##
)が日本語だとエンコードされリンクがうまくできない状況です。
make html
時に発生している問題・エラー
~~~/index.md:18: WARNING: 画像ファイルが読み込めません: main/%27img/%E3%82%B5%E3%83%9B%E3%82%9A%E3%83%BC%E3%83%88%E3%82%B5%E3%82%A4%E3%83%88.png
Markdown記述

ビルド後のHTML
画像ファイルがビルドされずに、リンク先を失った状態となる。
また、吐き出されたHTMLソースコードはURLエンコードされている。
<p>
<img alt="サポートサイト" src="main/img/%E3%82%B5%E3%83%9B%E3%82%9A%E3%83%BC%E3%83%88%E3%82%B5%E3%82%A4%E3%83%88.png" />
</p>
理想の状態
上記のような、URLエンコーディングされない状況を望んでいます。
<p>
<img alt="サポートサイト" src="main/img/サポートサイト.png" />
</p>
設定した conf.py
extensions = [
'myst_parser'
]
templates_path = ['_templates']
language = 'ja'
exclude_patterns = []
html_static_path = ['_static']
source_suffix = {
'.rst': 'restructuredtext',
'.txt': 'markdown',
'.md': 'markdown',
}
html_theme = "sphinx_rtd_theme"
html_show_sourcelink = False
html_style = 'css/theme_custom.css'
# source_encoding = 'utf-8-sig'
自分の環境
- 制作OS: MacOS 11.5
- Python: 3.9.6
- pip: 21.1.3 from python 3.9
- Sphinx: 4.1.1
- sphinx-rtd-theme: 0.5.2
- MyST-parser: 0.15.1
自分で試したこと
試しに、conf.pyに全体的な出力エンコーディングの設定を変更してみたが変わらず。
html_output_encoding = 'x-SJIS_0213'
MarkDownパーサーの変更
conf.py
を以下変更追加して、MarkDownパーサーを変更してみました。
が、結果変わらず。
extensions = [
# 'myst_parser'
'recommonmark'
]
source_parsers = {
'.md': 'recommonmark.parser.CommonMarkParser',
}
標準では
念の為、当方の環境要因の懸念事項として、reST
での確認をしてみましたが、reference internal
として生成してるので問題なくビルドできていることも確認ずみ。
.. hoge:
:ref:`hoge`
...
激しくほげ
----------------
0