问题被重写了。
我正在开发一个简单的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 +消失字符的数量==文本中的阿拉伯字符数时,问题就是阿拉伯语文本之后的一些字符消失了。
有什么想法吗?
答案 0 :(得分:5)
'Content-Length' => content.bytesize.to_s
会改进吗?
答案 1 :(得分:-1)
好吧,你必须告诉Ruby该字符串中包含阿拉伯语。对于支持这些阿拉伯字符的任何编码,请使用force_encoding
方法:
str.force_encoding("nameOfArabicEncoding")