はじめに



タイトル通り、Jekyllでは、windowsのローカル環境はフォルダ名やファイル名が日本語の場合、読み込むことができない。残念すぎる。 Ubuntuでは問題なく読み込めているし、記事はそっちで書くのでもいいんだけど、便宜上両方で書きたい。ということで、もしかしたら筆者の環境が悪いだけかも… いや、でもJekyllはwindowsを公式サポートしてないし… とか思いつつ、今回対応策を考えた。あくまで対応策。今回の記事で日本語名が使えるようになるわけではないので悪しからず。

対応策



  • フォルダ名、ファイル名をすべて英語に統一する。
    英語力のある人であれば、これで万事解決。英語力がなくても自分がわかればいいので適当に名前をつける。

  • フォルダ名、ファイル名を日本語だけ別の文字に置き換える。
    これはプログラミングができる人向け。筆者は記事のテンプレートをPythonで作成しているので、作成時にフォルダ名とファイル名に条件外の文字があったらその文字を16進に変換して作成するようにしている。
    追記: この方法、パスが長くなって大変不便なのでやめておいたほうがいいかも。現在筆者はファイル名を yyyy-mm-dd-[メインカテゴリ]_(1,2,3…).md としている。日付が重複回避してくれるから便利。

下のコードでは、文字列がASCII文字かを判定して、そうでなければ16進数に変換して置換するということをしている。 本当は日本語かどうかで判定したかったけど意外と面倒だから妥協した。あとコード内に出てくるcant_use_charsはURLで使えない文字を格納した配列でこれも同時に判定している。

# 文字列の正規化(使用できない文字は16進数文字に置き換える)
def _get_norm_str(self, s):
    if s.isascii() and len([c for c in cant_use_chars if c in s]) == 0: return s
    
    # 置き換え対象となる文字列と置き換える文字列
    before_after = {c : c.encode().hex() for c in s if not c.isascii() or c in cant_use_chars}
    
    # 置き換え
    for before, after in before_after.items():
        s = s.replace(before, after)

    return s

コード: https://github.com/shindy-works/shindys_pg_blog/blob/master/templatecreator.py