2010-05-04 98 views
1

我有一个Rails应用程序SayControllerhello操作和视图模板say/hello.html.erb。当我加入一些西里尔字符,如 “ю”,我得到一个错误:Ruby On Rails和UTF-8

引发ArgumentError在SayController#你好

invalid byte sequence in UTF-8

头:

{"Cache-Control"=>"no-cache", 
"X-Runtime"=>"11", 
"Content-Type"=>"text/html; charset=utf-8"} 

如果我尝试用嵌入式Ruby写这封信,

<%= "ю" %> 

我没有得到任何错误,但它在黑色方块( )中显示问号而不是此字母。

我使用Windows 7 x64,Ruby 1.9.1p378,Rails 2.3.5,WEBrick服务器。

+0

您是否在HTML标题中定义了UTF-8字符集? – shingara 2010-05-04 09:25:18

+0

是的,没有变化。 – 2010-05-04 09:35:49

回答

2

这个错误的一个可能的原因是包含西里尔文字母的文件不是用UTF8编码,而是可能用一些俄文编码如KOI8编码。这将导致字符无法在UTF8中解释(正确如此!)。

请仔细检查您的文件是否以UTF8正确编码。

+0

谢谢,双重检查帮助:-)我以为我已经设置了UTF-8作为项目的默认编码IDE preferenses ... – 2010-05-05 10:17:34

1

具有以下内容的下your_app创建一个初始化文件(例如encoding_fix.rb)/配置/初始化:

Encoding.default_internal = Encoding::UTF_8 if RUBY_VERSION > "1.9" 
Encoding.default_external = Encoding::UTF_8 if RUBY_VERSION > "1.9" 

这会将编码为UTF8。

+1

我已经完成了你说的,但仍然得到相同的错误。正如你可以在“Headers”部分看到的,服务器使用UTF-8发送数据。 – 2010-05-05 10:10:52

+0

这不起作用。 – epochwolf 2010-05-12 00:57:59

+0

我的代码片段将ruby字符串,即erb标签内的字符串转换为编码。 erb标签外部的字符用文件的实际编码进行解释。 – phil 2010-05-14 09:13:14