6

sinatraアプリケーションをruby1.9に移行しようとしています

sinatra 1.0、rack 1.2.0、erbテンプレートを使用しています

sinatraを起動すると機能しますが、ブラウザからWebページを要求すると、次のエラーが発生します。

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

すべての.rbファイルには次のヘッダーがあります。

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

UTF-8でエンコードされていることが示されていても、問題はerbファイルにあると思います

[user@localhost views]$ file home.erb
home.erb: UTF-8 Unicode text

誰かが以前にこの問題を抱えていましたか?シナトラはルビー1.9と完全に互換性がありませんか?

4

2 に答える 2

16

私はあなたの状況の詳細に精通していませんが、ソースコード(通常はUTF-8でエンコードされている)の文字列を外部からの文字列と連結しようとすると、Ruby1.9でこの種のエラーが発生しましたシステム、たとえば、HTMLフォームからの入力またはデータベースからのデータ。

ASCII-8BITは、基本的にバイナリの同義語です。入力文字列が、使用されている実際のエンコーディング(UTF-8やISO-8859-1など)でタグ付けされていないことを示しています。

私の理解では、Ruby 1.8は文字列をバイナリとして扱い、異なるエンコーディングの文字列をサイレントに連結するため、例外メッセージは表示されません。微妙な理由で、これは多くの場合問題ではありません。

私は昨日同様のエラーに遭遇し、この優れた概要を見つけました。

エラーメッセージを消すための1つのオプションは、外部ソースからの文字列にforce_encoding('UTF-8')(またはその他のエンコーディング)を使用することです。これは簡単に行うべきではなく、その影響を理解する必要があります。

于 2010-07-11T18:09:01.297 に答える
0

私も同じ問題を抱えていました。問題は、utf8でエンコードされたファイルでした。これはus-asciiである必要があります。

次のコマンドを使用して確認しましたfile(OSXの場合)。

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

ファイルから奇妙な文字を削除した後:

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

これで問題が解決しました。

于 2014-05-08T21:25:59.650 に答える