2010-07-11 52 views
6

我試圖遷移西納特拉應用Ruby 1.9的紅寶石1.9 +西納特拉不兼容的字符編碼:ASCII-8BIT和UTF-8

我使用西納特拉1.0機架1.2.0和ERB模板

當我開始西納特拉它的工作原理,但是當我要求的網頁從瀏覽器中我得到這個錯誤:

Encoding::CompatibilityError at/
incompatible character encodings: ASCII-8BIT and UTF-8 

所有的.rb文件有這個頭:

#!/usr/bin/env ruby 
# encoding: utf-8 

我認爲這個問題是在再培訓局的文件,即使它表明,它是UTF-8編碼

[[email protected] views]$ file home.erb 
home.erb: UTF-8 Unicode text 

任何一個有過這個問題嗎? sinatra與ruby 1.9不完全兼容?

+0

嘗試暫時將文件更改爲ascii。 – Adrian 2010-07-11 15:37:03

+1

問題是我需要在模板中使用utf-8租戶。 – John 2010-07-11 17:00:50

+0

如果您使用HTML,則應該用實體替換它們。否則,你可能想暫時把它們拿出來看看它們是否是問題。 – Adrian 2010-07-11 19:20:58

回答

15

我對你的情況的細節並不熟悉,但是這種錯誤出現在Ruby 1.9中,當試圖將源代碼中的字符串(通常用UTF-8編碼)與一個字符串來自系統外部,例如來自HTML表單的輸入或來自數據庫的數據。

ASCII-8BIT基本上是二進制的同義詞。它表明輸入字符串未使用已使用的實際編碼標記(例如,UTF-8或ISO-8859-1)。

我的理解是,在Ruby 1.8中看不到異常消息,因爲它將字符串視爲二進制,並將不同編碼的字符串進行靜默連接。由於微妙的原因,這通常不是問題。

昨天我遇到了類似的錯誤,並發現這個優秀的概述。

一個選項,讓您的錯誤信息消失是從外部源的字符串中使用force_encoding(「UTF-8」)(或其他編碼)。這不是輕易做到的,你需要了解其含義。

0

我有同樣的問題。問題是一個utf8編碼的文件,應該是us-ascii。

我檢查使用file命令(在OSX):

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

從文件中刪除怪異字符後:

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

這解決了該問題對我來說。

相關問題