0

我正在使用 RubyMotion 2.34、Motion-bundler 0.2.1 和 ruby​​sl-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 encodingUTF-8”,因为 Apple 的 ICU不支持它(RuntimeError)来自 http_client.rb:15:in `content'

当我将代码更改为:

@s.encode("US-ASCII")

String#encode所以,只要它是一个有效的编码名称,我给出的似乎并不重要。

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

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

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

4

1 回答 1

1

Ack,很抱歉听到这个消息。我仍然更喜欢使用 RubyMotion 而不是原始的 Objective-C。

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

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

此外,该方法String.force_encoding('UTF-8')也有效,但据我了解,如果在编码期间存在实际错误,则不会引发错误(就像在正常编码方法中那样)。但是根据您的使用情况,这可能没问题。

至少对我来说,这应该可以工作,直到 RubyMotion 修复了这个(我认为的)错误。

于 2015-02-09T19:13:27.900 回答