簡體   English   中英

String.encode失敗,無法通過編碼'UTF-8'執行,因為Apple的ICU不允許這樣做

[英]String.encode is failing with cannot be performed with encoding 'UTF-8' because Apple's ICU doesn't allow it

我正在使用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: block in content': this operation cannot be performed with encoding UTF-8 block in content': this operation cannot be performed with encoding因為Apple的ICU不支持來自http_client.rb:15:in'content'中的ICU(RuntimeError)

當我將代碼更改為時,我也得到了完全相同的錯誤(注意到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) end end

同樣,方法String.force_encoding('UTF-8')也可以工作,盡管據我了解,如果在編碼過程中出現實際錯誤,則不會引發該錯誤(就像在正常的編碼方法中那樣) 。 但是根據您的用法,可能沒問題。

至少對我來說,這應該有效,直到RubyMotion修復了這個(我認為)的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM