Ruby Thin / Rack奇怪的多字节字符行为

时间:2012-06-30 13:23:34

标签: ruby encoding utf-8 rack thin

问题被重写了。

我正在开发一个简单的Web框架,并且遇到了Rack或我正在使用的瘦服务器的奇怪行为。

我尽可能多地简化 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进程,内容是一个HTML段落,其中包含一个四个字母的阿拉伯语单词。现在,运行瘦服务器:thin start,我正在等待网页的来源:

<p>عربي</p>

虽然它变成了:

<p>عربي

仅限,没有结束标记。如果我插入一个英文单词而不是阿拉伯语单词,服务器可以正常工作,所以我得出结论,问题与阿拉伯语的编码或多字节字符有关。

我正在使用Ruby 1.9.2。该文件的编码是UTF-8。如果我在没有Rack或Thin服务器的控制台中尝试puts "<p>عربي</p>",那么Ruby运行良好。

所以,当使用Rack和Thin +消失字符的数量==文本中的阿拉伯字符数时,问题就是阿拉伯语文本之后的一些字符消失了。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

'Content-Length' => content.bytesize.to_s会改进吗?

答案 1 :(得分:-1)

好吧,你必须告诉Ruby该字符串中包含阿拉伯语。对于支持这些阿拉伯字符的任何编码,请使用force_encoding方法:

str.force_encoding("nameOfArabicEncoding")