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

ste*_*ang 3 ruby encoding erb utf-8

我有一个用utf-8编码存储的数据文件,我想将数据嵌入到erb模板中.数据文件在顶部用utf-8显式编码.但是在运行erb引擎但我遇到Encoding::CompatibilityError错误.

我认为Ruby中的默认编码是ASCII,erb模板也必须在ascii下编码.我明确地将它改为utf-8但没有好处.

这是数据文件:

# coding: utf-8

samples: [
    { name: '??', city: '??' }
]
Run Code Online (Sandbox Code Playgroud)

这是Erb模板:

<% # -*- coding: UTF-8 -*- %>
#...
<p><%= samples[:name] %></p>
Run Code Online (Sandbox Code Playgroud)

shi*_*eya 5

(我决定写不同的答案)

我认为有两个问题.

  • 输入上的数据文件编码
  • 你如何输出

erb库知道魔术注释中的编码规范,但是数据文件部分,你需要自己照顾.因此,当您读取文件时,您必须指定编码,或预先指定默认编码.

在输出时,您需要指定输出的编码.您可以根据I/O通道指定.

要指定默认编码(最简单),您可以:

Encoding.default_external = "UTF-8"
Run Code Online (Sandbox Code Playgroud)

将UTF-8用于所有I/O.