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

时间:2018-06-28 13:06:34

标签: ruby encoding utf-8 erubis

我在重构小型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'

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

这是我的代码:

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

我在红宝石脚本的顶部添加了#encoding: utf-8,并在网上上下搜索,但没有找到解决方法。

1 个答案:

答案 0 :(得分:0)

发现问题出在输入中。 erubis尝试将其解析为ASCII,但是遇到了一些讨厌的字符并掉在了它的脸上。

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

告诉红宝石读取过程中数据的编码是这样的:

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

erubis会正确处理