我知道这已经被问过好几次了,但对我来说发生了一些奇怪的事情:
我有一个索引视图,其中呈现某些字符(带重音的字母)会导致 Rails 引发异常
incompatible character encodings: ASCII-8BIT and UTF-8
所以我检查了我的字符串编码,这实际上到处都是 ASCII-8BIT,即使我在 application.rb 中将正确的编码设置为 UTF-8
config.encoding = "utf-8"
在我的 environment.rb 中
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
在我的数据库中出现:
character_set_database = utf-8
正如一些指南中所建议的那样。
字符串使用 textarea 字段插入,并且不会连接到任何其他已插入的字符串。
奇怪的是:
- 这仅在索引视图中发生,而在节目中没有发生(相同的资源)
- 这只发生在这个模型上(这是一封电子邮件,带有主题和正文,但这不应该影响任何事情)
- 在我的开发环境中,一切顺利
str.force_encoding('utf-8')
,而在我的生产环境中,这不起作用。(开发我使用 Ruby 2.0.0,生产 Ruby 2.1.0,Rails4 和 MySql) - 设置文件视图
# encoding utf-8
也不起作用 - 尝试
str.force_encoding('ascii-8bit').encode('utf-8')
说Encoding::UndefinedConversionError "\xC3" from ASCII-8BIT to UTF-8
哪个是à,在使用 时body.force_encoding('ascii-8bit').encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '?')
,用 ? 替换所有重音字符,而str.force_encoding('iso-8859-1').encode('utf-8')
显然会生成错误的字符 (a?
)。
所以我的问题是 2: - 为什么 rails 将字符串编码设置为 ascii-8bit?- 如何解决这个问题?
我已经检查了这些问题(使用 rails4 的最新问题):
"\xC2" 到 UTF-8 从 ASCII-8BIT 到 UTF-8 的转换
编码::UndefinedConversionError: "\xE4" 从 ASCII-8BIT 到 UTF-8
和其他资源也一样,但没有任何效果。