我知道这个问题已经被问过几次了,但是对我来说却发生了一些奇怪的事情:
我有一个索引 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字段中,并且未与任何其他已插入的字符串串联。
奇怪的是:
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/