2

質問は書き直されました。

単純なWebフレームワークで作業していますが、使用しているRackサーバーまたはThinサーバーのいずれかで奇妙な動作が発生しました。

config.ruファイルをできるだけ単純化して、奇妙な問題を再現する次のコードを取得しようとしました。

app = Proc.new do |env|
    content = "<p>عربي</p>"
    headers = {'Content-Type' => 'html/text; charset=utf-8', 'Content-Length' => content.length.to_s}
    [200, headers, [content]]
end

run app

上記のコードは通常のRackプロセスであり、コンテンツには4文字のアラビア語を含むHTML段落が含まれています。今、Thin serverを実行しています:thin start、私はWebページのソースが次のようになるのを待っていました:

<p>عربي</p>

それが次のようになっている間:

<p>عربي

終了タグなしのみ。アラビア語の代わりに英語の単語を挿入した場合、サーバーは正しく機能するため、問題はアラビア語のエンコードまたはマルチバイト文字に関連していると結論付けました。

Ruby1.9.2を使用しています。ファイルのエンコーディングはUTF-8です。puts "<p>عربي</p>"また、RuckまたはThinサーバーを使用せずにコンソールで試してみると、Rubyはうまく機能します。

したがって、問題は、Rack andThinを使用したときにアラビア語のテキストの後に文字数が消えるだけです+消える文字の数==テキスト内のアラビア文字の数です。

何かご意見は?

4

2 に答える 2

5

'Content-Length' => content.bytesize.to_s物事を改善しますか?

于 2012-06-30T15:55:13.203 に答える
-1

文字列にアラビア語が含まれていることをRubyに伝える必要があります。force_encodingこれらのアラビア文字をサポートするエンコーディングでこのメソッドを使用します。

str.force_encoding("nameOfArabicEncoding")
于 2012-06-30T13:31:56.610 に答える