ruby 1.9 + sinatra 不兼容的字符编码 : ASCII-8BIT and UTF-8

标签 ruby encoding sinatra erb utf-8

我正在尝试将 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/

相关文章:

ruby - 使用 ruby​​ gem net-ssh-multi 同时在多个服务器上执行 sudo 命令

ruby - 如果我对字符串使用 << 运算符,我可以使用几乎任何标识符吗?

c - 使用霍夫曼编码的文本数据压缩

python - 拉丁字母的 PySpark DF 和 RDD 编码

php - json_decode\u2019

json - 在 Sinatra 应用程序上返回 gzip 压缩的内容

ruby - 未找到 RVM 包

mysql - 将SQL结果转换为Hash

ruby - Heroku 和网络抓取

ruby - 在 Sinatra 和 Thin 上下载大文件时内存消耗高