我正在尝试将 sinatra 应用程序迁移到 ruby 1.9
我正在使用 sinatra 1.0、rack 1.2.0 和 erb 模板
当我启动 sinatra 时它可以工作,但是当我从浏览器请求网页时出现此错误:
Encoding::CompatibilityError at /
incompatible character encodings: ASCII-8BIT and UTF-8
所有 .rb 文件都有这个标题:
#!/usr/bin/env ruby
# encoding: utf-8
我认为问题出在 erb 文件中,即使它显示它是 UTF-8 编码
[user@localhost views]$ file home.erb
home.erb: UTF-8 Unicode text
有人遇到过这个问题吗? sinatra 与 ruby 1.9 不完全兼容吗?
最佳答案
我不熟悉你的具体情况,但是在 Ruby 1.9 中尝试将源代码中的字符串(通常以 UTF-8 编码)与来自系统外部,例如,来自 HTML 表单的输入或来自数据库的数据。
ASCII-8BIT 基本上是二进制的同义词。它表明输入字符串未使用已使用的实际编码(例如,UTF-8 或 ISO-8859-1)进行标记。
我的理解是,在 Ruby 1.8 中看不到异常消息,因为它将字符串视为二进制并默默地连接不同编码的字符串。出于微妙的原因,这通常不是问题。
我昨天遇到了类似的错误,并找到了这篇优秀的概述。
消除错误消息的一个方法是对来自外部源的字符串使用 force_encoding('UTF-8')(或其他编码)。这不是轻而易举的事,您需要了解其中的含义。
关于ruby 1.9 + sinatra 不兼容的字符编码 : ASCII-8BIT and UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3223518/