我正在使用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
其中
@response
是AFMotion::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/