我已经得到了的二手一堆使用大量不同的Ruby解释器的人gem,它包括什么归结为以下代码:处理字符串编码与红宝石1.8相同的代码和1.9
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只,然后红宝石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是String'res'标记了用户的默认编码,该编码可能不是UTF-8,这会导致REXML陷入困境。 – jpatokal 2011-03-29 02:35:26