Ruby on Rails 3,不兼容的字符编码:UTF-8和带有i18n的ASCII-8BIT

Nic*_*ume 34 ruby-on-rails utf-8 internationalization character-encoding ruby-on-rails-3

我对Rails 3.0.1,Ruby 1.9.2以及我的网站本地化产生了一些麻烦.

问题很简单,我在视图中有类似的东西:

f.input :zip_code, :label => I18n.t('labels.zip_code')
Run Code Online (Sandbox Code Playgroud)

和es.yml文件:

es:
  labels:
    zip_code: "Este código postal no es valido."
Run Code Online (Sandbox Code Playgroud)

en.yml文件没有麻烦(它是纯ASCII)但是当网站设置时i18n.locale == 'es'我得到这个错误:

incompatible character encodings: UTF-8 and ASCII-8BIT
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一段时间,但没有找到使用我的UTF-8翻译文件的方法.

有人知道如何让它有效吗?

谢谢你的帮助.

Nic*_*ume 47

好吧,经过几个小时的谷歌搜索后问题解决了......

我的代码实际上有两个错误.第一个是文件编码错误,第二个是MySQL数据库配置问题.

首先,要解决MySQL引起的错误,我使用了这两篇文章:

http://www.dotkam.com/2008/09/14/configure-rails-and-mysql-to-support-utf-8/

http://www.rorra.com.ar/2010/07/30/rails-3-mysql-and-utf-8/

其次,为了解决文件编码问题,我在config/environment.rb中添加了这两行

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
Run Code Online (Sandbox Code Playgroud)

希望这会帮助某人:)

  • 谢谢一堆!有同样的问题,除了我使用mysql gem而不是mysql2之外我一切都没问题. (2认同)

Rit*_*mar 23

我通过结合许多解决方案解决了大部分问题:

  • 确保application.rb有这一行:config.encoding = "utf-8".
  • 确保你使用'mysql2'宝石
  • 放在# encoding: utf-8包含utf-8字符的任何文件的顶部.
  • <App Name>::Application.initialize!在行上方添加以下两行environment.rb:

    Encoding.default_external = Encoding::UTF_8
    Encoding.default_internal = Encoding::UTF_8
    
    Run Code Online (Sandbox Code Playgroud)

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html