我有一个用utf-8编码存储的数据文件,我想将数据嵌入到erb
模板中。数据文件在顶部用utf-8显式编码。但是在运行erb引擎时遇到Encoding::CompatibilityError
错误。
我认为Ruby中的默认编码是ASCII,erb模板也必须在ascii下编码。我已经明确地将它改为utf-8但是没有好处。
这是数据文件:
# coding: utf-8
samples: [
{ name: '北京', city: '北京' }
]
这是Erb模板:
<% # -*- coding: UTF-8 -*- %>
#...
<p><%= samples[:name] %></p>
答案 0 :(得分:5)
(我决定写不同的答案)
我认为有两个问题。
erb库知道魔术评论中的编码规范,但是数据文件部分,你需要自己照顾。因此,当您阅读文件时,您必须指定编码,或事先指定默认编码。
在输出时,您需要指定输出的编码。您可以根据I / O通道指定。
要指定默认编码(最简单),您可以:
Encoding.default_external = "UTF-8"
将UTF-8用于所有I / O.
答案 1 :(得分:0)
如果您正在使用Rails,是否在application.rb
中配置了默认编码?像:
config.encoding = "utf-8"
My Rails(3.2.1)项目除此之外不包含任何配置。
您要检查的其他事项是,您的数据文件是否真的是UTF-8。 如果您使用的是类Unix系统,可以使用'nkf'命令检查代码:
nkf --guess FILE_NAME
答案 2 :(得分:0)
在模板标题中指定<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
答案 3 :(得分:0)
在您有一个ERB模板从UTF-8格式的另一个文件中呈现字符串的情况下,将以下内容添加到ERB模板的顶部即可为我解决此问题:
<%# coding: UTF-8 %>
(而不是<% # -*- coding: UTF-8 -*- %>
)