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

我有一个索引 View ,其中渲染某些字符(带有重音符号的字母)会导致Rails引发异常

incompatible character encodings: ASCII-8BIT and UTF-8

所以我检查了我的字符串编码,尽管我在application.rb中将正确的编码设置为UTF-8,但实际上到处都是ASCII-8BIT。
config.encoding = "utf-8"

并在我的enviroment.rb中
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

并在我的数据库中显示:
character_set_database = utf-8

正如一些指南中的建议。

字符串插入到textarea字段中,并且未与任何其他已插入的字符串串联。

奇怪的是:
  • 这仅在索引 View 中发生,而在显示(相同资源)中则没有发生。
  • 这仅在此模型下发生(这是一封电子邮件,包含主题和正文,但这不影响任何内容)
  • 在我的开发环境中,设置str.force_encoding('utf-8')一切都会很好,而在我的生产环境中,这是行不通的。 (开发人员使用的是Ruby 2.0.0,在生产Ruby 2.1.0中,既是Rails4,又是MySql)
  • 使用# encoding utf-8设置文件 View 也不起作用
  • 在尝试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将字符串encodint设置为ascii-8bit?
    -如何解决这个问题?

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

    Rails View Encoding Issues

    "\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

    和其他资源,但无济于事。

    最佳答案

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

    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。 ,以及该字符串的确切来源。

    关于ruby-on-rails - ASCII-8BIT中的Rails编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22248902/

    10-14 12:33
    查看更多