5

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

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

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

所以我检查了我的字符串编码,这实际上到处都是 ASCII-8BIT,即使我在 application.rb 中将正确的编码设置为 UTF-8

config.encoding = "utf-8"

在我的 environment.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也不起作用
  • 尝试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')显然会生成错误的字符 (a ?)。

所以我的问题是 2: - 为什么 rails 将字符串编码设置为 ascii-8bit?- 如何解决这个问题?

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

Rails 视图编码问题

"\xC2" 到 UTF-8 从 ASCII-8BIT 到 UTF-8 的转换

如何在 Ruby 中将字符串转换为 UTF8

编码::UndefinedConversionError: "\xE4" 从 ASCII-8BIT 到 UTF-8

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

4

1 回答 1

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

于 2014-09-30T20:46:05.190 回答