Ruby on rails ASCII-8BIT中的Rails编码

Ruby on rails ASCII-8BIT中的Rails编码,ruby-on-rails,encoding,utf-8,ruby-on-rails-4,ruby-2.1,Ruby On Rails,Encoding,Utf 8,Ruby On Rails 4,Ruby 2.1,我知道这已经被问过好几次了,但对我来说,发生了一些奇怪的事情: 我有一个索引视图,其中呈现某些字符(带重音的字母)会导致Rails引发异常 incompatible character encodings: ASCII-8BIT and UTF-8 所以我检查了字符串编码,实际上到处都是ASCII-8BIT,尽管我在application.rb中将正确的编码设置为UTF-8 config.encoding = "utf-8" 在我的环境中 Encoding.default_external

我知道这已经被问过好几次了,但对我来说,发生了一些奇怪的事情:

我有一个索引视图,其中呈现某些字符(带重音的字母)会导致Rails引发异常

incompatible character encodings: ASCII-8BIT and UTF-8
所以我检查了字符串编码,实际上到处都是ASCII-8BIT,尽管我在application.rb中将正确的编码设置为UTF-8

config.encoding = "utf-8"
在我的环境中

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8
在我的数据库中显示:

character_set_database = utf-8
正如一些指南中所建议的那样

字符串与textarea字段一起插入,并且不会连接到任何其他已插入的字符串

奇怪的是:

  • 这仅在索引视图中发生,而在显示中不会发生(相同的资源)
  • 这种情况只会发生在这种模式下(这是一封电子邮件,带有主题和正文,但这不会影响任何事情)
  • 在我的开发环境中,设置str.force_编码('utf-8')一切都很顺利,而在我的生产环境中,这不起作用。(开发人员我使用Ruby 2.0.0、生产Ruby 2.1.0、Rails4和MySql)
  • 使用
    #encoding utf-8
    设置文件视图也不起作用
  • 尝试
    str.force_编码('ascii-8bit')。encode('utf-8')
    encoding::UndefinedConversionError“\xC3”从ascii-8bit转换为utf-8
    ,这是一个字符,同时使用
    body.force_编码('ascii-8bit')。encode('utf-8')。无效=>:replace,:undefiled=>:replace=>,:replace=>“?”)
    ,将所有重音字符替换为?,
    str.force\u编码('iso-8859-1')。encode('utf-8')
    显然生成了错误的字符(a
所以我的问题是2: -为什么rails将字符串encodin设置为ascii-8bit? -如何解决这个问题

我已经检查了这些问题(rails4的最新问题):


还有其他资源,但没有任何效果。

您的源代码中可能有一个字符串文本,然后您还可以连接另一个字符串。例如:

some_string = "this is a string"
甚至

some_string = "" #empty string
存储在
some_string
中的那些字符串将被标记为ASCII8bit,如果您稍后执行以下操作:

some_string = some_string + unicode_string
然后你会得到错误。也就是说,除非在创建字符串文字的文件顶部添加以下内容,否则这些字符串将标记为ASCII-8BIT:

#encoding: utf-8
该声明确定了源代码中字符串文字的默认编码


我只是在猜测,因为这种模式是这个问题的常见根源。为了更确切地了解,需要比您的问题中更多的信息——需要调试实际的源代码,才能准确地知道什么字符串被标记为ASCII-8BIT,而您希望它被标记为UTF-8,以及该字符串的确切来源

您是否使用文本编辑器在视图中输入重音字符?它是一个文本区域?字段是源代码文件所有utf-8,或者您的文本编辑器是否正在以ascii-8bit格式保存文件。这些不是由我的文本编辑器生成的字符串…反正文件是utf-8格式的。我正在努力解决类似的问题(从用户输入的数据中获取
不兼容字符编码:ASCII-8BIT和UTF-8
错误)。您是否能够解决您的问题?您是否找到在测试中复制它的方法?