【问题标题】:Ruby On Rails and UTF-8Ruby On Rails 和 UTF-8
【发布时间】:2010-05-04 09:14:23
【问题描述】:

我有一个带有SayControllerhello 操作和视图模板say/hello.html.erb 的Rails 应用程序。当我添加一些像“ю”这样的西里尔字符时,我得到一个错误:

ArgumentError in SayController#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 服务器。

【问题讨论】:

  • 你在 HTML Header 中定义了 UTF-8 字符集吗?

标签: ruby-on-rails ruby encoding utf-8


【解决方案1】:

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

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

【讨论】:

  • 谢谢,仔细检查有帮助 :-) 我以为我已将 UTF-8 设置为 IDE 首选项中项目的默认编码...
【解决方案2】:

在 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。

【讨论】:

  • 我已经完全按照你说的做了,但仍然遇到同样的错误。正如您在“标头”部分中看到的,服务器正在以 UTF-8 格式发送数据。
  • 我的代码 sn-p 将 ruby​​ 字符串,即 erb 标签内的字符串转换为编码。 erb 标记之外的字符将使用文件的实际编码进行解释。
  • Ruby 1.9 UTF8 问题有多种形式。此修复解决了其中一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2015-11-04
  • 2023-04-03
相关资源
最近更新 更多