Подтвердить что ты не робот

Международные символы, использующие RSpec с Ruby on Rails

Я только что начал использовать RSpec, и я скопировал очень простой тест на RSpec github repo, чтобы убедиться, что все работает как ожидалось:

require 'spec_helper'

describe 'Home Page' do
  it "Welcomes the user" do
    visit '/products'
    page.should have_content("Welcome")
  end
end

Проблемы начинаются, когда я меняю строку на что-то вроде "Olá" или "Caçamba". Любая строка со специальным символом. Когда я это сделаю, я получаю следующую ошибку:

invalid multibyte char (US-ASCII) (SyntaxError)
invalid multibyte char (US-ASCII)
syntax error, unexpected $end, expecting ')'
page.should have_content("Olá")

Любые идеи о том, как это исправить? Может быть, какой-то вариант конфигурации? Большое спасибо

4b9b3361

Ответ 1

Скорее всего, вам не хватает магического комментария в верхней части файла:

# encoding: UTF-8

Без этой директивы Ruby пытается интерпретировать ваш файл с кодировкой US-ASCII по умолчанию и терпит неудачу, поскольку этот набор символов не включает символы, такие как á или ç.

Здесь сообщение в блоге об исходной кодировке по умолчанию в Ruby от Джеймса Эдварда Грея II.

Ответ 2

Международные символы почти всегда используют значения за пределами диапазона US-ASCII, который представляет собой только английский алфавит, цифры и небольшой набор символов, которые вы найдете на клавиатуре (если вы используете американскую клавиатуру). Символы с акцентами, причудливость, или даже не символы (например, смайлики) представлены более чем в одном байте, что является всем, что используется для представления US-ASCII. Отображения численного значения для символа являются кодовыми. После US-ASCII существует ISO-8891-1, который добавляет акценты к файлу (в основном, испанскому, французскому, шведскому и т.д.) (Например: é, å, ü и т.д.). После этого вы получаете Unicode, который включает в себя такие вещи, как ˝, ‰, Ó, ◊ или почти любой символ, который вы можете представить на любом языке.

Ruby по умолчанию имеет кодировку программы и все строки в ней как US-ASCII. Вы можете либо изменить кодировку всего файла (и все в нем) с помощью магического комментария (см. Ответ @KL-7), либо вы можете изменить его на строку по строкам:

"Olé".force_encoding("ISO-8891-1")

Ruby также поддерживает мнимую кодировку под названием ASCI 8-bit, которая по существу является двоичными данными без кодирования.