6

我正在尝试将 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 不完全兼容吗?

4

2 回答 2

16

我不熟悉您的具体情况,但是当尝试将源代码中的字符串(通常以 UTF-8 编码)与来自外部的字符串连接时,Ruby 1.9 中出现了这种错误例如,来自 HTML 表单的输入或来自数据库的数据。

ASCII-8BIT 基本上是二进制的同义词。这表明输入字符串未使用已使用的实际编码进行标记(例如,UTF-8 或 ISO-8859-1)。

我的理解是在 Ruby 1.8 中看不到异常消息,因为它将字符串视为二进制并默默地连接不同编码的字符串。出于微妙的原因,这通常不是问题。

我昨天遇到了类似的错误,发现了这个很好的概述。

消除错误消息的一种选择是对来自外部源的字符串使用 force_encoding('UTF-8') (或其他编码)。这不是轻而易举的事情,您需要了解其中的含义。

于 2010-07-11T18:09:01.297 回答
0

我遇到过同样的问题。问题是应该是 us-ascii 的 utf8 编码文件。

我使用file命令(在 OSX 上)进行了检查:

$ file --mime-encoding somefile
somefile: utf-8

从文件中删除奇怪的字符后:

$ file --mime-encoding somefile
somefile: us-ascii

这为我解决了这个问题。

于 2014-05-08T21:25:59.650 回答