我知道这已经被问过好几次了,但是对我来说发生了一些奇怪的事情:
我有一个索引视图,其中呈现某些字符(带有重音的字母)会导致Rails引发异常。
incompatible character encodings: ASCII-8BIT and UTF-8所以我检查了我的字符串编码,这实际上到处都是ASCII-8位,即使我在我的application.rb中将正确的编码设置为UTF-8。
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')一切都很顺利,而在我的生产环境中,这是行不通的。(dev我使用Ruby2.0.0,在生产Ruby2.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-8位?-如何解决这个问题?
我已经检查了这些问题(使用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
还有其他资源,但都没有用。
发布于 2014-09-30 20:46:05
您可能在源代码中有一个字符串文本,然后连接另一个字符串。例如:
some_string = "this is a string"甚至是
some_string = "" #empty string存储在some_string中的这些字符串将被标记为ASCII_8BIT,如果稍后执行如下操作:
some_string = some_string + unicode_string那么你就会得到错误。也就是说,除非将这些字符串添加到创建字符串文本的文件的顶部,否则这些字符串将被标记为ASCI-8位:
#encoding: utf-8该声明确定了源代码中字符串文本的默认编码。
我只是猜测,因为这个模式是这个问题的一个常见来源。要确定更多,需要比问题中的信息更多的信息--需要调试实际的源代码,才能准确地确定哪些字符串被标记为ASCII-8位,而您希望将其标记为UTF-8,以及该字符串的确切来源。
https://stackoverflow.com/questions/22248902
复制相似问题