ruby-on-rails - Rails 3 路由、Yaml 和转义 UTF-8

标签 ruby-on-rails ruby ruby-on-rails-3 utf-8

我遇到了一个考验我理智的问题。在我的 Rails 应用程序中,我从一个 I18n 翻译文件中加载一个转义的 UTF-8 字符串,以用于我的应用程序路由。但是,在路由中使用时,rails 不会对字符串进行转义。这是我的翻译文件:

--- 
ru: 
  activerecord: 
    models: 
      item: 
        other: "\xD0\xA2\xD0\xBE\xD0\xB2\xD0\xB0\xD1\x80\xD1\x8B" # UTF-8 escaped version of "Товары". (to_yaml is doing the escaping btw)

这是我的 config/routes.rb

match "/#{Item.model_name.human(:count => :other).downcase}" => "items#index"

但是,当导航到这条路线时,我得到:

Routing Error

No route matches "/%d0%a2%d0%be%d0%b2%d0%b0%d1%80%d1%8b"

如果 UTF-8 未转义地存储在翻译文件中,则一切正常。 to_yaml 正在转义字符串并导致问题。有什么办法可以强制 yaml 保留原始字符串吗?

顺便说一句,我使用的是 Rails 3.0.7、Ruby 1.9.2。谢谢大家!

最佳答案

对于 YAML,这似乎已正确转义,但它不是特定于 UTF-8 的。这只是 Ruby 字符串转义,可用于任何字符编码,UTF-8 只是其中一种。

您看到的错误是同一内容的 URL 转义版本。

确保您在 rake routes 的输出中正确定义了一条路线,根据您的字符串,该路线将是 /Товары

关于ruby-on-rails - Rails 3 路由、Yaml 和转义 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310380/

相关文章:

mysql - Rails - Mysql::ProtocolError: 无效数据包

html - float 属性是否会影响复选框的功能?

ruby-on-rails - 为什么 elem_match 返回 0 个元素?

ruby-on-rails - Rails 3 和 RJS

ruby-on-rails - Heroku:保存缓存时遇到错误

ruby-on-rails - Rails参数,为什么params[ :key] syntax?

ruby-on-rails - Mongoid 批量更新/Upsert 替代方案?

ruby-on-rails - ruby sftp 错误

ruby - Rspec 的 `should_receive` 是否有侵入性较小的替代方案?

ruby-on-rails-3 - 具有多个嵌套资源的 Rails 表单对象