Ruby on Rails 3,不兼容的字符编码:UTF-8和带有i18n的ASCII-8BIT
我遇到了Rails 3.0.1,Ruby 1.9.2和我的网站本地化的一些麻烦。
问题很简单,我在视图中有这样的东西:
f.input :zip_code, :label => I18n.t('labels.zip_code')
和一个es.yml文件:
es: labels: zip_code: "Este código postal no es valido."
en.yml文件(它是纯粹的ASCII)没有问题,但是当网站设置为i18n.locale == 'es'
我得到这个错误:
incompatible character encodings: UTF-8 and ASCII-8BIT
我一直在寻找相当一段时间,但没有find一种方法来使用我的UTF-8翻译文件。
有人知道如何使它工作?
谢谢你的帮助。
好吧,所以问题解决了几个小时后Google …
在我的代码中实际上有两个错误。 第一个是文件编码错误,第二个是MySQL数据库configuration的问题。
首先解决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
希望这会帮助别人:)
我通过结合许多解决scheme解决了大部分问题:
- 确保
application.rb
有这样一行:config.encoding = "utf-8"
。 - 确保你使用'mysql2'gem
- 将#encoding
# encoding: utf-8
放在任何包含utf-8字符的文件的顶部。 -
在
<App Name>::Application.initialize!
添加以下两行<App Name>::Application.initialize!
在environment.rb
行:Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8
http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html
你确定你的es.yml
文件保存为UTF-8吗?
如果你在Windows上,请使用http://notepad-plus-plus.org/来确认。;
使用这个解压缩函数帮助我最后解决这个问题,如果你得到不能转换的错误信息,试试这个:
myString.unpack('U*').pack('U*')
确保config/application.rb
有config.encoding = "utf-8"
。 此外,您的示例翻译文件不匹配您正在search的键( com_name
和first_name
),但我想这可能只是一个错字。