Sass/Compassで"invalid byte sequence in Windows-31J" エラーが出たのでその対応
Ruby2.0にアップデートしたら、Sass/Compassでエラーが出るように
Ruby2.0にアップデートしたところ、CompassでSassのコンパイルを行う時に下記のエラーが出てしまうようになりました。
bashinvalid byte sequence in Windows-31J Run with --trace to see the full backtrace
参考
こちらのページが参考になりました。どうやら、Windows環境でRuby製のツールを使う時にエンコーディングが問題となるようです。
対応方法
```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 で紹介されているものそのままです。
```rubyMake 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