我知道这已被问过好几次,但对我来说却发生了一些奇怪的事情:
我有一个索引视图,其中渲染某些字符(带重音的字母)会导致Rails引发异常
incompatible character encodings: ASCII-8BIT and UTF-8
所以我检查了我的字符串编码,这实际上是ASCII-8BIT无处不在,即使我在我的application.rb中将正确的编码设置为UTF-8
config.encoding = "utf-8"
在我的环境中.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')
显然生成错误的字符(?
)。所以我的问题是2: - 为什么rails将字符串编码设置为ascii-8bit? - 如何解决这个问题?
我已经检查了这些问题(使用rails4的最新问题):
"\xC2" to UTF-8 in conversion from ASCII-8BIT to UTF-8
How to convert a string to UTF8 in Ruby
Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8
和其他资源,但没有任何效果。
答案 0 :(得分:0)
您的源代码中可能有一个字符串文字,然后您可以连接另一个字符串。例如:
some_string = "this is a string"
甚至
some_string = "" #empty string
存储在some_string
中的字符串将被标记为ASCII_8BIT,如果您稍后再执行以下操作:
some_string = some_string + unicode_string
然后你就会收到错误。也就是说,这些字符串将被标记为ASCII-8BIT ,除非您添加,添加到创建字符串文字的文件的顶部:
#encoding: utf-8
该声明确定源代码中的字符串文字将具有的默认编码。
我只是在猜测,因为这种模式是这个问题的常见原因。要知道更多信息,它需要的信息比你的问题要多 - 它需要调试实际的源代码,当你期望它被标记为UTF-8时,确切地确定哪个字符串被标记为ASCII-8BIT ,以及String来自哪里。