如何在erb模板中使用utf-8编码数据

时间:2012-03-14 03:50:01

标签: ruby encoding utf-8 erb

我有一个用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>

4 个答案:

答案 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 -*- %>