我有一个在 Ruby 1.9.3 上运行的非常简单的 Sinatra 应用程序,它使用 ERB 和 markdown 模板。我已经将其剥离以证明问题所在。
这是在 Mac OS X Snow Leopard 上运行 Sinatra 1.3.2。对于降价,我使用的是 rdiscount 1.6.8。
主 Ruby 文件包含
get '/services' do
erb :services
end
services.erb 文件中包含以下内容
<%= markdown :'content/service1' %>
£
在降价文件中,我只有一行
£
当我运行 Sinatra 应用程序并加载“服务”页面时,我Encoding::CompatibilityError at /services incompatible character encodings: UTF-8 and ASCII-8BIT
在 ERB 文件的第二行(仅包含“£”的那个)上得到了异常。
我已经做了很多谷歌搜索,但我一生都无法弄清楚为什么会发生这种情况。ERB 和 markdown 文件在我的本地磁盘上是 UTF-8,但显然它们正在由 Sinatra 加载并转换为字符串,我不知道如何判断这些字符串的编码是什么。
如果我强制 Sinatra 使用 ASCII-8BIT(通过添加settings.default_encoding = 'ASCII-8BIT'
到我的主 Sinatra Ruby 文件的顶部),则不会引发异常,但 '£' 字符看起来是错误的。
任何指针?