2013-08-25 65 views
0

我試圖創建一段代碼,它將從互聯網上下載一個頁面並對其進行一些操作。該頁面使用iso-8859-1編碼。Ruby 1.9 iso-8859-8-i編碼

我無法找到處理此文件的方法。我需要在希伯來文中搜索文件並將更改後的文件返回給用戶。

我試圖使用string.encode,但我仍然得到錯誤的編碼。

打印響應編碼時,我得到:"encoding":{}喜歡它的不確定,這是什麼,它返回一個例子:

\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd-\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd \ufffd\ufffd\ufffd\ufffd       

它應該是希伯來字母。

當我用final.body.encode('iso-8859-8-i')嘗試時,出現錯誤code converter not found (ASCII-8BIT to iso-8859-8-i)

+1

編碼問題可能是許多不同的事情。您能否添加一些更具體的細節,以及非工作代碼的精確步驟和示例(簡化來顯示您的編碼問題)?顯然它取決於輸入文件,所以只需顯示加載文件的位置以及在該階段輸出的是什麼'p file_contents.encoding'。 –

+0

增加了更多信息 –

回答

1

當您輸入Ruby或OS錯誤地分配編碼的地方時,轉換將不起作用。這是因爲Ruby將從錯誤的假設開始,並嘗試在轉換時保留錯誤的字符。

但是,如果您從其他來源獲知正確的編碼是什麼,您可以使用force_encoding方法告訴Ruby如何解釋它加載到String的字節。注意這改變了對象。

E.g.

contents = final.body 
contents.force_encoding('ISO-8859-8') 
puts contents 

在這一點上(前提是它的工作原理),你現在可以做轉換(例如以UTF-8),因爲Ruby已經正確地告訴它在處理什麼字。

我在我的Ruby版本上找不到'ISO-8859-8-I'。我不確定'ISO-8859-8'與您需要的距離有多接近(如果...-I編碼不可用,某些Google搜索表明它可能對您有用)。

+1

你能告訴我什麼時候這個方法[**'default_external ='**](http://www.ruby-doc.org/core-2.0/Encoding.html#method-c-default_external-3D )然後用? –

+0

@Babai:好問題。這可能是適當的(儘管由於全局性的變化,您鏈接的文檔表明這不會在Ruby代碼中調用)。可能最好的是在開源時首先設置編碼,但OP沒有顯示用於此的方法,所以我的回答是基於我在問題中可以看到的補丁。另外,這可能是因爲編碼沒有通過HTTP頭髮送(因爲它應該是這樣),所以OP別無選擇,只能以某種方式強制選擇編碼。 –

+0

Humm ..我woun't評論對你的答案..我只是檢查,如果這種方法也可以有所幫助..這就是它冷卻:) –