Недавно я обновил один из проектов до Rails 4.2 и заметил интересный эффект: кодировка обработанных html-файлов в ассетах меняется на ISO-8859-1. Данная проблема актуальна для Sprockets 3.0.0 и 3.0.1. Проблема была найдена в EncodingUtils#detect_html:
При загрузке файла Sprockets пытается определить стандарт Unicode, очистить строку из спецификации и вернуть ее в требуемой кодировке.#.
module Sprockets # Internal: HTTP transport encoding and charset detecting related functions. # Mixed into Environment. module EncodingUtils extend self #.
# Public: Detect charset from HTML document. Defaults to ISO-8859-1. # # str - String. # # Returns a encoded String. def detect_html(str) str = detect_unicode_bom(str) # Attempt Charlock detection if str.encoding == Encoding::BINARY charlock_detect(str) end # Fallback to ISO-8859-1 if str.encoding == Encoding::BINARY str.force_encoding(Encoding::ISO_8859_1) end str end CHARSET_DETECT[:html] = method(:detect_html) end end
В случае с html, если на этом этапе не удалось определить кодировку, то пытаемся позволить это сделать charlock_holmes (если он установлен), иначе принудительно конвертируем в ISO-8859-1. Проблема в том, что для UTF-8 не требуется спецификация, и поэтому почти все редакторы сохраняют файлы в UTF-8 без спецификации.
Это означает, что метод `detect_unicode_bom` по большей части бесполезен, а html-файлы в ресурсах всегда будут конвертироваться в ISO-8859-1.
Решить проблему можно следующими способами:
1. Переопределить тип Mime для text/html в инициализаторе: 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 ( запрос на вытягивание )
Теги: #ruby #рельсы #звездочки #ruby #рубин на рельсах
-
Ноутбук Hp Pavilion: Dv600T
19 Oct, 24 -
Вперед В Прошлое. Geforce Fx. Рассвет Войны
19 Oct, 24 -
.Net И Yaml
19 Oct, 24 -
Субстики №71
19 Oct, 24 -
Григорий Бакунов
19 Oct, 24 -
Apache Ant — Быстрый Старт
19 Oct, 24 -
Редизайн, Часть 2
19 Oct, 24 -
Как Выглядит Ошибка Запуска Windows Phone 8?
19 Oct, 24