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://....")これは、単純な US-ASCII 文字だけを含む単純な XML 文字列です。次のエラーが表示されます。

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 のためですhttp_client.rb:15:in `content' からはサポートされていません (RuntimeError)。

コードを次のように変更すると、まったく同じエラー (UTF-8 に注意) も発生します。

@s.encode("US-ASCII")

String#encodeということで、有効なエンコーディング名であれば何を付けても構わないようです。

更新: このエラーは、次のような使用する任意の文字列で発生します。

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

誰もこの状況を修正する方法を知りませんか?

4

1 に答える 1

1

Ack、それを聞いて申し訳ありません。私は今でも生の 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) end end

また、この方法String.force_encoding('UTF-8')も機能しますが、私が理解しているように、エンコード中に実際のエラーが発生した場合、エラーは発生しません (通常のエンコード方法のように)。でも、使い方によっては、それでいいのかもしれません。

少なくとも私にとっては、RubyMotion がこの (私が考える) バグを修正するまで、これは機能するはずです。

于 2015-02-09T19:13:27.900 に答える