不要将文件编码与字符串编码混淆
文件顶部的语句的目的#encoding
是让 Ruby 在读取/解释代码期间知道,并且您的编辑器知道在编辑/读取文件时如何处理任何非 ASCII 字符- 只有当您有文件中至少有一个非 ASCII 字符。例如,在您的配置/语言环境文件中是必需的。
要一次在所有文件中定义编码,您可以使用
magic_encoding gem,它可以将 uft-8 魔术注释插入应用程序中的所有 ruby 文件。
您在运行时遇到Encoding::CompatibilityError
的错误是当您在程序执行期间尝试连接两个具有不同编码的字符串时发生的错误,并且它们的编码不兼容。
这很可能发生在以下情况:
您正在使用 L10N 字符串(例如 UTF-8),并将它们连接到例如 ASCII 字符串(在您看来)
用户键入外语字符串(例如 UTF-8),您的视图尝试在某些视图中将其打印出来,以及您预定义的一些固定字符串(ASCII)。 force_encoding
将在那里提供帮助。在 Rails 1.9 中还可Encoding::primary_encoding
以为新字符串设置默认编码。
Rails 中有config.encoding
config/application.rb 文件。
来自您的数据库的字符串,然后与您视图中的其他字符串组合。(它们的编码可能是任意一种,并且不兼容)。
旁注:确保在创建数据库时指定默认编码!
create database yourproject DEFAULT CHARACTER SET utf8;
如果您想在字符串中使用 EMOJI:
create database yourproject DEFAULT CHARACTER SET utf8mb4 collate utf8mb4_bin;
并且所有可能包含 EMOJI 的字符串列的索引长度必须为 191 个字符。字符集 utf8mb4 整理 utf8mb4_bin
原因是普通 UTF8 最多使用 3 个字节,而 EMOJI 使用 4 个字节存储。
请查看这篇 Yehuda Katz 文章,该文章深入介绍了这一点,并很好地解释了它:(特别是“不兼容的编码”部分)
http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/
http://yehudakatz.com/2010/05/17/encodings-unabridged/
和:
http://zargony.com/2009/07/24/ruby-1-9-and-file-encodings
http://graysoftinc.com/character-encodings