我有一个gem,它被一群人使用了一堆不同的 Ruby 解释器,它包括归结为这段代码的内容:
res = RestClient.post(...)
doc = REXML::Document.new(res).root
的内容res
始终是 UTF-8,这在 Ruby 1.8 中运行良好,但如果响应不是纯 ASCII并且用户的默认编码不是 UTF-8,则在 Ruby 1.9 下它会爆炸。
现在,如果我想单独在 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
更好的想法,或者这是最好的?对尝试使用不同编码的图书馆用户会有负面影响吗?