使用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的虚构编码,它本质上是没有编码的二进制数据。