erubis:`scan':US-ASCII 中的无效字节序列(ArgumentError)

erubis: `scan': invalid byte sequence in US-ASCII (ArgumentError)

我 运行 重构一个小的 web 服务时遇到这个错误。有趣的是,在生产服务器上,它工作正常。

.../erubis-2.7.0/lib/erubis/converter.rb:132:in `scan': invalid byte sequence in US-ASCII (ArgumentError)
        from .../erubis-2.7.0/lib/erubis/converter.rb:132:in `convert_input'
        from .../erubis-2.7.0/lib/erubis/converter.rb:36:in `convert'
        from .../erubis-2.7.0/lib/erubis/engine.rb:30:in `initialize'

我 运行 apache 与 ruby 2.3.3p222 (2016-11-21) [x86_64-linux-gnu] 在 Debian 9 机器上。

这是我的代码:

input = File.read('/somedir/chpwd.html')
eruby = Erubis::Eruby.new(input)

我已将 #encoding: utf-8 添加到我的 ruby-脚本的顶部并在网上上下搜索,但没有找到解决方案。

原来问题出在输入上。 erubis 试图将其解析为 ASCII,但遇到了一些令人讨厌的字符并失败了。

不幸的是,erubis 没有对编码问题发表评论,因此我通过这个答案找到了解决方案: Does Ruby provide a way to do File.read() with specified encoding?

告诉ruby读取数据的编码方式如下:

File.read('/someir//chpwd.html', :encoding => 'utf-8')

erubis 会妥善处理