使用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á") 

关于如何修复它的任何想法? 也许一些配置选项? 非常感谢

很可能你错过了文件顶部的魔术评论

 # encoding: UTF-8 

如果没有此指令,Ruby会尝试使用默认的US-ASCII编码来解释您的文件,并且失败,因为此字符集不包含áç等符号。

这是James Edward II在Ruby中发布的关于默认源编码的博客文章 。

国际字符几乎总是使用US-ASCII范围之外的值,这只是英文字母,数字和键盘上的一小组符号(如果使用美国键盘)。 带有重音,幻想或不是偶数字符的字符(例如表情符号)用多个字节表示,这些字节用于表示US-ASCII。 数值到字符的映射是callen和编码。 在US-ASCII之后,有ISO-8891-1,它增加了文件的重音(主要是西class牙语,法语,瑞典语等)(例如:é,å,ü等)。 之后,您将获得Unicode,其中包括˝,‰,Ó,◊或几乎任何您能用任何语言思考的符号。

默认情况下,Ruby具有程序的编码,并且其中的所有字符串都是US-ASCII。 您可以使用魔术注释更改整个文件的编码(以及其中的所有内容)(请参阅@ KL-7的答案),或者您可以逐个字符串地更改它:

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

Ruby还支持一种名为ASCI 8-bit的虚构编码,它本质上是没有编码的二进制数据。