我刚刚开始使用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á")
有关如何修复它的任何想法?也许一些配置选项?非常感谢
答案 0 :(得分:29)
您很可能错过了文件顶部的magic comment:
# encoding: UTF-8
如果没有此指令,Ruby会尝试使用默认的US-ASCII编码来解释您的文件,并且失败,因为此字符集不包含á
或ç
等符号。
这是James Edward II在Ruby中默认源编码的blog post。
答案 1 :(得分:0)
国际字符几乎总是使用US-ASCII范围之外的值,这只是您在键盘上找到的英文字母,数字和一小组符号(如果您使用美国键盘)。带有重音,幻想或非偶数字符的字符(例如表情符号)用多个字节表示,这些字节用于表示US-ASCII。数值到字符的映射是callen和编码。在US-ASCII之后,有ISO-8891-1,它增加了文件的重音(主要是西班牙语,法语,瑞典语等)(例如:é,å,ü等)。之后,您将获得Unicode,其中包括˝,‰,Ó,◊或几乎任何您能用任何语言思考的符号。
Ruby,默认情况下,它具有程序的编码,并且其中的所有字符串都是US-ASCII。您可以使用魔术注释更改整个文件(及其中的所有内容)的编码(请参阅@ KL-7的答案),或者您可以逐个字符串地更改它:
"Olé".force_encoding("ISO-8891-1")
Ruby还支持一个名为ASCI 8-bit的虚构编码,它本质上是没有编码的二进制数据。