我正在使用RubyMotion 2.34,Motion-bundler 0.2.1和rubysl-rexml 2.4.1的iOS7上工作。

尝试解析服务器的XML响应时,在REXML的编码部分中出现以下错误。但是,我还做了以下操作来找出问题,这就是REXML库对给出的字符串所做的事情:

def content
    @s = @response.body.to_s
    puts @s.encoding
    @s.encode("UTF-8")
end


其中@responseAFMotion::HTTP.get("http://....")调用的返回。它只是一个简单的XML字符串,只包含简单的US-ASCII字符。我收到以下错误:


  2014-10-02 18:34:14.714 Promotion-motion-kit [44375:1346884] ***由于未捕获的异常'RuntimeError'而终止应用程序,原因:'http_client.rb:17:in block in content': this operation cannot be performed with encoding UTF-8'因为Apple的ICU不支持(RuntimeError)
      来自http_client.rb:15:在`content'中


当我将代码更改为时,我也得到了完全相同的错误(注意到UTF-8):

@s.encode("US-ASCII")


因此,只要它是有效的编码名称,我给出的String#encode似乎都没有关系。

更新:我使用的任何字符串都会引发此错误,例如:

"hello".encode("UTF-8")


没人知道如何纠正这种情况吗?

最佳答案

阿克,很遗憾听到这个消息。与原始的Objective-C相比,我仍然更喜欢使用RubyMotion。

尽管我没有完美的解决方案,但至少在我看来,我有一个不错的解决方法。对我来说,我99.9%的输入将已经是utf8格式,并且字符串将显示它具有该编码。因此,我重写了encode方法来检查这种情况。

class String alias_method :orig_encode, :encode def encode(encoding) return self if self.encoding.to_s == encoding orig_encode(encoding) endend

同样,方法String.force_encoding('UTF-8')也可以工作,尽管据我所知,如果在编码过程中出现实际错误,则不会引发该错误(就像在普通编码方法中那样)。但是根据您的用法,可能没问题。

至少对我来说,这应该有效,直到RubyMotion修复了这个(我认为)错误为止。

关于ios - String.encode失败,无法通过编码'UTF-8'执行,因为Apple的ICU不允许这样做,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26170958/

10-11 11:54