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

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

require 'spec_helper'

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

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

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

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

 thyagx05 июл. 2012 г., 16:59
Файлы были сохранены как UTF-8
 LanguagesNamedAfterCofee04 июл. 2012 г., 16:32
Ваш файл сохраняется как ASCII или UTF-8?

Ответы на вопрос(2)

Международные символы почти всегда используют значения вне диапазона US-ASCII, который представляет собой только английский алфавит, цифры и небольшой набор символов, которые вы найдете на клавиатуре (если вы используете клавиатуру США). Символы с акцентами, причудливыми или нечетными символами (например, смайлики) представлены более чем одним байтом, и это все, что используется для представления US-ASCII. Отображение числового значения в символ называется кодировкой. После US-ASCII существует ISO-8891-1, который добавляет акценты в файл (в основном испанский, французский, шведский и т. Д.) (Например: & # xE9 ;, & # xE5 ;, & # xFC; и т. Д.) .). После этого вы получите Unicode, который включает в себя такие вещи, как & # x2DD ;, & # x2030 ;, & # xD3 ;, & # x2C6 ;, & # x25CA; или почти любой символ, который вы можете придумать вany язык.

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

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

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

 04 июл. 2012 г., 16:46
Я думаюforce_encoding может помочь в работе со строкой позже, но это не поможет интерпретатору разобрать исходный строковый литерал. Я прав? Вот связанныйarticle на кодирование строк в Ruby.
 04 июл. 2012 г., 16:49
@ KL-7: Да. Вы правы. Вам нужен волшебный комментарий.
Решение Вопроса

Скорее всего, вам не хватаетmagic comment вверху вашего файла:

# encoding: UTF-8

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

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

 thyagx05 июл. 2012 г., 16:58
Большое спасибо KL-7, это исправляет :) Gem magic_encoding также очень полезен, спасибо @naliwajek
 30 мая 2013 г., 23:40
Это было неожиданно очень легко. Спасибо!
 04 июл. 2012 г., 16:45
Кстати, есть хороший драгоценный камень под названиемmagic_encoding это может помочь вам быстро добавить этот комментарий к файлам .rb.

Ваш ответ на вопрос