问题被重新写了。
我正在开发一个简单的 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 进程,内容是一个 HTML 段落,其中包含四个字母的阿拉伯单词。现在,运行 Thin server: thin start
,我正在等待网页的来源是:
<p>عربي</p>
虽然它变成了:
<p>عربي
只有,没有结束标签。如果我插入一个英文单词而不是阿拉伯语单词,则服务器可以正常工作,因此我断定问题与阿拉伯语的编码或多字节字符有关。
我正在使用 Ruby 1.9.2。文件的编码是 UTF-8。如果我只是puts "<p>عربي</p>"
在没有机架或瘦服务器的控制台中尝试,Ruby 效果很好。
因此,问题只是在使用 Rack and Thin + 消失的字符数 == 文本中的阿拉伯字符数时,阿拉伯文本之后的一些字符消失了。
有什么想法吗?