Вопрос по testing, ruby, rspec, ruby-on-rails – Международные символы, использующие RSpec с Ruby on Rails

12

Я только начал использовать 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á")

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

Файлы были сохранены как UTF-8 thyagx
Ваш файл сохраняется как ASCII или UTF-8? LanguagesNamedAfterCofee

Ваш Ответ

2   ответа
28

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

# encoding: UTF-8

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

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

Это было неожиданно очень легко. Спасибо!
Большое спасибо KL-7, это исправляет :) Gem magic_encoding также очень полезен, спасибо @naliwajek thyagx
Кстати, есть хороший драгоценный камень под названиемmagic_encoding это может помочь вам быстро добавить этот комментарий к файлам .rb.
0

Международные символы почти всегда используют значения вне диапазона 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, которое представляет собой двоичные данные без кодирования.

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

Похожие вопросы