【发布时间】:2011-07-20 04:55:00
【问题描述】:
我有一个gem,它让一群人使用了一堆不同的 Ruby 解释器,它包括归结为这段代码的内容:
res = RestClient.post(...)
doc = REXML::Document.new(res).root
res 的内容始终是 UTF-8,这在 Ruby 1.8 中可以正常工作,但如果响应不是纯 ASCII,则在 Ruby 1.9 下它会爆炸并且用户的默认编码是不是 UTF-8。
现在,如果我想单独在 Ruby 1.9 上进行这项工作,我只需将 res.force_encoding('utf-8') 粘贴在那里并完成它,但该方法仅适用于 1.9,然后在 Ruby 1.8 下中断:
NoMethodError: undefined method `force_encoding' for #<String:0x101318178>
能想出的最佳解决方案是这样,它强制系统范围的默认编码为 UTF-8:
Encoding.default_external = 'UTF-8' if defined? Encoding
更好的想法,或者这是最好的?是否会对尝试使用不同编码的图书馆用户产生负面影响?
【问题讨论】:
-
澄清一下,我可以依赖传入的内容始终是有效的 UTF-8。 Ruby 1.9 中的问题是字符串
res被标记为用户的默认编码,可能不是 UTF-8,这会导致 REXML 出错。
标签: ruby character-encoding ruby-1.9 ruby-1.8