2010-09-07 71 views
9

我知道,在Ruby 1.9中,您可以輕鬆地重新編碼像這樣的字符串。在Ruby 1.8中將字符串簡單轉換爲UTF-8

s = s.encode('UTF-8') 

Ruby 1.8中的等價物是什麼?它需要什麼線路。

我看到的所有教程都是不必要的複雜,我不明白髮生了什麼。

+0

紅寶石2.8?紅寶石2.9? – 2010-09-07 23:48:51

+1

對不起,這是厭煩的說話糾正。 – Alex 2010-09-08 00:43:11

回答

10

James Edward Gray II有一個detailed collections of posts處理Ruby 1.8中的編碼和字符集問題。標題爲Encoding Conversion with iconv的帖子包含詳細信息。

摘要:iconv gem完成編碼轉換的所有工作。確保它的安裝使用:(不具有內在的編碼)

gem install iconv 

現在,你需要知道什麼編碼的字符串是目前作爲Ruby的1.8對待字符串作爲字節數組例如,假設您的字符串是latin1的,你想把它轉換爲UTF-8

require 'iconv' 

string_in_utf8_encoding = Iconv.conv("UTF8", "LATIN1", string_in_latin1_encoding) 

參數的順序是:

  1. 目標編碼
  2. 源編碼
  3. 字符串轉換
+0

如果我不確定初始字符串的編碼,該怎麼辦?有什麼方法可以檢測它嗎? – Alex 2010-09-09 11:28:19

+0

一般?不。如果傳入的編碼可能性有限,您可以使用某種啓發式方法,但它不會完全準確或可靠(隨着可能編碼數量的增加,變得更加不可靠)。 – rjk 2010-09-09 13:55:35

+0

乾杯。我猜是因爲它是從SQL字段輸入的,我可以認爲它是這種類型的字符編碼。 – Alex 2010-09-11 11:35:36