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 进程,内容是一个 HTML 段落,其中包含四个字母的阿拉伯单词。现在,运行 Thin server: thin start,我正在等待网页的来源是:

<p>عربي</p>

虽然它变成了:

<p>عربي

只有,没有结束标签。如果我插入一个英文单词而不是阿拉伯语单词,则服务器可以正常工作,因此我断定问题与阿拉伯语的编码或多字节字符有关。

我正在使用 Ruby 1.9.2。文件的编码是 UTF-8。如果我只是puts "<p>عربي</p>"在没有机架或瘦服务器的控制台中尝试,Ruby 效果很好。

因此,问题只是在使用 Rack and Thin + 消失的字符数 == 文本中的阿拉伯字符数时,阿拉伯文本之后的一些字符消失了。

有什么想法吗?

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 回答