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

Oma*_*mar 2 ruby encoding rack utf-8 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
Run Code Online (Sandbox Code Playgroud)

上面的代码是一个普通的Rack进程,内容是一个HTML段落,其中包含四个字母的阿拉伯语单词.现在,运行瘦服务器:thin start,我正在等待网页的来源:

<p>????</p>
Run Code Online (Sandbox Code Playgroud)

虽然它变成了:

<p>????
Run Code Online (Sandbox Code Playgroud)

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

我正在使用Ruby 1.9.2.该文件的编码是UTF-8.如果我只是puts "<p>????</p>"在没有Rack或Thin服务器的情况下尝试使用Ruby,那么Ruby运行良好.

因此,当使用Rack和Thin +消失字符的数量==文本中的阿拉伯字符数时,问题就是阿拉伯语文本之后的许多字符消失了.

有什么想法吗?

ste*_*lag 5

是否'Content-Length' => content.bytesize.to_s改善的事情?