Sass/Compassで”invalid byte sequence in Windows-31J” エラーが出たのでその対応


Ruby2.0にアップデートしたら、Sass/Compassでエラーが出るように

Ruby2.0にアップデートしたところ、CompassでSassのコンパイルを行う時に下記のエラーが出てしまうようになりました。

invalid byte sequence in Windows-31J Run with --trace to see the full backtrace

参考

こちらのページが参考になりました。どうやら、Windows環境でRuby製のツールを使う時にエンコーディングが問題となるようです。

対応方法

Encoding.default_external = 'UTF-8'

config.rbの一番上に、この1行を追加したところ、”invalid byte sequence in Windows-31J” エラーは出なくなりました。

エラーの起きていた箇所

スプライト画像をCompassを使って作成しています。このスプライト画像が、デフォルトでは”sprite-s8fcadae08d.png”のように、自動でハッシュ文字列(s8fcadae08d の部分)が加えられてしまうのを、config.rbに下記のコードを追加することで、作成したスプライト画像とCSSからハッシュ文字列を削除するようにしていました。

この部分を削除すると、エンコーディングをUTF-8に指定せずともエラーは出ません。

下記コードは css – How to remove the hash from Compass’s generated sprite image filenames? – Stack Overflow で紹介されているものそのままです。

# Make a copy of sprites with a name that has no uniqueness of the hash.
on_sprite_saved do |filename|
  if File.exists?(filename)
    FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, '.png')
  end
end

# Replace in stylesheets generated references to sprites
# by their counterparts without the hash uniqueness.
on_stylesheet_saved do |filename|
  if File.exists?(filename)
    css = File.read filename
    File.open(filename, 'w+') do |f|
      f << css.gsub(%r{-s[a-z0-9]{10}\.png}, '.png')
    end
  end
end
Categories

+ There are no comments

Add yours