我有一个带有SayController
,hello
操作和视图模板say/hello.html.erb
的Rails应用程序。当我添加一些西里尔字符如“ю”时,我收到一个错误:
SayController中的ArgumentError#hello
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 :(得分:2)
这个错误的一个可能原因是包含西里尔字母的文件不是用UTF8编码的,而是像KOI8这样的俄语编码。这将导致在UTF8中无法解释字符(这是正确的!)。
请仔细检查您的文件是否以UTF8格式正确编码。
答案 1 :(得分:1)
使用以下内容在your_app / config / initializers下创建初始化文件(例如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。