Проблемы кодирования в файлах JavaScript с использованием конвейера ресурсов rails

Я использую рельсы 3.1 и конвейер ресурсов (ruby 1.9.2).

Я получаю следующую ошибку при попытке служить JavaScript js.erb файл, содержащий строки в кодировке utf-8

invalid byte sequence in US-ASCII

Я поставил Encoding.default_external = "UTF-8" в моем файле environment.rb. Как получить конвейер ресурсов для обслуживания с другой кодировкой?

РЕДАКТИРОВАТЬ

Ошибка появляется, только когда я генерирую символ utf-8 вне файла (в данном случае путем запроса из БД). Ошибка исчезнет, ​​если я добавлю

<% "日" %>

в начало файла. Я предполагаю, что здесь происходит какое-то предположение о кодировании, но как мне избежать этого без этого хакерского решения?

1 ответ

Решение

При загрузке файла Ruby пытается "угадать" его кодировку. Если UTF-8 или какие-либо другие символы, отличные от ASCII, не найдены, он использует US-ASCII в качестве кодировки для файла и выдает ошибку, если внезапно обнаруживает не-ASCII-символ, который, например, загружается во время выполнения.

Лучшее решение этой проблемы - заставить Ruby использовать определенную кодировку, добавив # encoding: utf-8 как первая строка файла.rb или <%# encoding: utf-8 %> если это файл.erb.

Другие вопросы по тегам