Как использовать данные в кодировке utf-8 в шаблоне erb - PullRequest
3 голосов
/ 14 марта 2012

У меня есть файл данных, хранящийся в кодировке utf-8, и я хочу встроить данные в шаблон erb.Файл данных явно закодирован с помощью utf-8 вверху.Но во время работы механизма erb, но я сталкиваюсь с Encoding::CompatibilityError Error.

Я думал, что кодировка по умолчанию в Ruby - ASCII, шаблон erb также должен быть закодирован в ascii.Я явно изменил его на utf-8, но ничего хорошего.

Вот файл данных:

# coding: utf-8

samples: [
    { name: '北京', city: '北京' }
]

Вот шаблон Erb:

<% # -*- coding: UTF-8 -*- %>
#...
<p><%= samples[:name] %></p>

Ответы [ 4 ]

5 голосов
/ 14 марта 2012

(Я решил написать другой ответ)

Мне кажется, два вопроса.

  • кодирование файла данных на входе
  • как вы выводите

Библиотека erb знает о спецификации кодирования в волшебных комментариях, но часть файла данных, вы должны позаботиться самостоятельно.Поэтому, когда вы читаете файл, вы должны заранее указать кодировку или кодировку по умолчанию.

При выводе необходимо указать кодировку для вывода.Вы можете указать для каждого канала ввода / вывода.

Чтобы указать кодировку по умолчанию (самое простое), вы можете:

Encoding.default_external = "UTF-8"

использовать UTF-8 для всех операций ввода / вывода.

1 голос
/ 28 января 2019

В сценарии, где у вас есть шаблон рендеринга строк ERB из другого файла в UTF-8, добавление следующего в верхнюю часть шаблона ERB решило это для меня:

<%# coding: UTF-8 %>

(вместоиз <% # -*- coding: UTF-8 -*- %>)

0 голосов
/ 14 марта 2012

Укажите <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> в заголовке шаблона

0 голосов
/ 14 марта 2012

Если вы используете Rails, настроили ли вы кодировку по умолчанию в application.rb?например:

config.encoding = "utf-8"

Проект My Rails (3.2.1) не содержит никакой другой конфигурации, кроме этой.

Другая вещь, которую вы хотите проверить, - действительно ли ваш файл данных в UTF-8или нет.Если вы используете Unix-подобную систему, вы можете использовать команду 'nkf' для проверки кода:

nkf --guess FILE_NAME
...