2012-07-04 100 views
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á") 

有關如何解決它的任何想法?也許有一些配置選項?非常感謝

+0

您的文件是否保存爲ASCII或UTF-8? – LanguagesNamedAfterCofee

+0

文件被保存爲UTF-8 – thyagx

回答

28

最有可能你在你的文件的頂部缺少magic comment

# encoding: UTF-8 

沒有這個指令紅寶石試圖解釋你的文件,默認的US-ASCII編碼和因爲這個角色失敗設置不包括像áç這樣的符號。

這裏是一個blog post在詹姆斯·愛德華·格雷二世在Ruby中默認的源代碼編碼。

+2

順便說一句,有一個很好的名爲[magic_encoding]的寶石(https://github.com/m-ryan/magic_encoding/),可以幫助你快速添加這個評論到.rb文件。 –

+0

非常感謝KL-7,它修復了它:) magic_encoding寶石也是非常有幫助的,謝謝@naliwajek – thyagx

+0

..這真是非常容易。謝謝! – Trip

0

國際字符幾乎總是使用US-ASCII範圍以外的值,它只是英文字母,數字和在鍵盤上找到的一小組符號(如果使用美式鍵盤)。帶有重音,幻想或者不是偶字符的字符(例如表情符號)用多個字節表示,這就是用來表示US-ASCII的所有字符。數字到字符的映射是一個編碼。在US-ASCII之後,有ISO-8891-1,它爲文件添加了重音符(主要是西班牙文,法文,瑞典文等)(例如:é,å,ü等)。之後,您將獲得Unicode,其中包括諸如˝,‰,Ó,◊之類的東西,或者幾乎可以在任何語言中想到的任何符號。

Ruby默認情況下將程序編碼並將其中的所有字符串編碼爲US-ASCII。你可以改變整個文件與魔法評論的編碼(和它的一切)(見@ KL-7的答案),也可以通過串基礎改變它的字符串:

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

的Ruby也支持一種名爲ASCI 8位的虛構編碼,它基本上是不帶編碼的二進制數據。

+1

我認爲'force_encoding'可能有助於稍後使用字符串,但它不會幫助解釋器解析原始字符串文字。我對嗎?這裏是一個關於Ruby編碼字符串的相關[文章](http://blog.grayproductions.net/articles/ruby_19s_string)。 –

+0

@ KL-7:是的。你是對的。你需要一個神奇的評論。 – Linuxios