Jekyllで予想通りに文字コードエラー

  • 30 Jun 2014

導入したjekyllで早速の文字コードエラーが出たので記録しておきます。

このブログはブログシステムにjekyllを利用しているのですが、 今回の導入に際して文字コードの部分ではまったのでメモしておきます。

環境

  • Windows8 64bit
  • Ruby Ver1.9.3
  • Jekyll 1.4.2

Rubyのバージョンが2.0.0以上ではない点が注意です。なんで2.0じゃないんだよ、という突込みもあるかと思いますが、ご容赦ください。

エラー内容

記事をコンパイルしようとすると以下のようなエラーが出ました。

$ jekyll build
Configuration file: c:/xxxxxxxxx/_config.yml
            Source: c:/xxxxxxxxx
       Destination: c:/xxxxxxxxx/_site
      Generating... Error reading file c:/xxxxxxxxx/_layouts/post.html: invalid byte
sequence in Windows-31J
Error reading file c:/xxxxxxxxx/_posts/2014-03-09-restart.markdown: invalid byte sequence in Windows-31J
error: invalid byte sequence in Windows-31J. Use --trace to view backtrace

典型的な文字コードエラーのように見えます。

解決方法

一番てっとり早いのは、set LANG=ja_JP.UTF-8とすることですが、残念ながら自分のマシンではうまくいかず、 下記のようにWindows-31Jから抜け出せませんでした。

$ ruby -e "puts Encoding.default_external"
> Windows-31J    <- ここがUTF-8になるはず・・・

そこで、Jekyllの呼び出しタイミングで文字コードを直接指定しました(参考:Windows で Jekyll 1.3 を動かすまでの手順)。 修正するファイルはC:\[Rubyまでのパス]\lib\ruby\gems\2.0.0\gems\jekyll-1.4.2\bin\jekyllで、下記のようにEncoding.default_external = "utf-8"を追記します。

#!/usr/bin/env ruby
# 以下の1行を追記
Encoding.default_external = "utf-8"
STDOUT.sync = true

$:.unshift File.join(File.dirname(__FILE__), *%w{ .. lib })

これで文字コードの問題は回避できます (ただJekyllのみにUTF8を指定したので問題の根本解決にはなりませんでしたが・・)。

余談

余談ですが、2014年3月9日時点でのjekyllの最新版は不安定らしく、私の環境では上手く動ききませんでした。いくつかの情報を見ていると「最新版ではなくて1.4.2なら動くよ」という事だったので、本ブログもそのようにしています。 一応、下記にインストール方法記述しておきます。

$ gem uninstall jekyll
$ gem install jekyll --version "=1.4.2"