Rails编码为ASCII-8BIT

时间:2014-03-07 11:30:35

标签: 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"

在我的环境中.rb

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

在我的数据库中显示:

character_set_database = utf-8

作为一些指南中的建议。

使用textarea字段插入字符串,并且不会将其连接到任何其他已插入的字符串。

奇怪的是:

  • 这只发生在索引视图中,而这在show(同一资源)
  • 中没有发生
  • 这种情况只发生在这个模型上(这是一个电子邮件,主题和正文,但这不应该影响任何事情)
  • 在我的开发环境中,一切顺利设置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的最新问题):

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

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

1 个答案:

答案 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来自哪里。