少し前に、私はプロジェクトの1つをRails 4.2にアップグレードし、興味深い効果に気付きました。アセット内の処理済みhtmlファイルのエンコードがISO-8859-1に変更されました。
この問題は、Sprockets 3.0.0および3.0.1に関連しています。
問題はEncodingUtils#detect_htmlで見つかりました:
ファイルをダウンロードするとき、SprocketsはUnicode標準を決定し、BOMから行を削除し、目的のエンコードでそれを返そうとします。 htmlの場合、この段階でエンコードを判別できなかった場合、charlock_holmesに(インストールされている場合)行わせようとします。そうでない場合は、強制的にISO-8859-1に変換します。
問題は、BOMはUTF-8に必須ではないため、ほとんどすべてのエディターがBOMなしでファイルをUTF-8に保存することです。 これは、 `detect_unicode_bom`メソッドがほとんどの場合役に立たず、アセット内のhtmlファイルが常にISO-8859-1に変換されることを意味します。
次の方法で問題を解決できます。
1.初期化子でテキスト/ htmlのMimeタイプをオーバーライドします。
Rails.application.assets.register_mime_type('text/html', extensions: '.html', charset: :default)
2. charlock_holmesを設定します。
3.バージョン3.0.2にアップグレードします。デフォルトの動作はISO-8859-1からEncoding.default_external(
pull request )に変更されます