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

文字列を「Olá」や「Caçamba」などに変更すると、問題が発生します。特殊文字を含む任意の文字列。これを行うと、次のエラーが表示されます。

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

それを修正する方法についてのアイデアはありますか?多分いくつかの設定オプション?どうもありがとう

4

2 に答える 2

29

ほとんどの場合、ファイルの先頭にマジック コメントがありません。

# encoding: UTF-8

áこのディレクティブがないと、Ruby はデフォルトの US-ASCII エンコーディングでファイルを解釈しようとしますが、この文字セットにはやなどの記号が含まれていないため失敗しますç

James Edward Gray II による Ruby のデフォルト ソース エンコーディングに関するブログ投稿を次に示します。

于 2012-07-04T14:33:04.987 に答える
0

国際文字は、ほとんどの場合、US-ASCII の範囲外の値を使用します。US-ASCII は、英語のアルファベット、数字、およびキーボードにある小さな記号のセットのみです (US キーボードを使用している場合)。アクセントのある文字、奇抜な文字、または文字ではない文字 (絵文字など) は、US-ASCII を表すために使用されるすべてのバイトで表されます。数値から文字へのマッピングは、エンコーディングと呼ばれます。US-ASCII の後には ISO-8891-1 があり、ファイルにアクセントを追加します (主にスペイン語、フランス語、スウェーデン語など) (例: é、å、ü など)。その後、「」、「‰」、「Ó」、「^」、「◊」など、任意の言語で考えられるほぼすべての記号を含む Unicode を取得します。

デフォルトでは、Ruby はプログラムとその中のすべての文字列を US-ASCII としてエンコードします。ファイル全体 (およびその中のすべて) のエンコーディングをマジック コメント (@KL-7 の回答を参照) で変更するか、文字列ごとに変更することができます。

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

Ruby は、ASCI 8 ビットと呼ばれる仮想エンコーディングもサポートしています。これは、本質的にエンコーディングのないバイナリ データです。

于 2012-07-04T14:43:31.877 に答える