2012-03-02 43 views
0

我有這樣的代碼:爲什麼file.truncate將我的文件轉換爲0的紅寶石?

File.open(name, 'r+') do |f| 
     new_file = f.read.sub /ApplicationController/, 'AdminController' 
     f.truncate 0 
     f.write new_file 
     f.close 
    end 

和它應該與AdminController更換ApplicationController中,然後截斷該文件,然後寫入新的內容,然後將其關閉。

然而,當它截斷該文件,然後寫入它,它看起來像這樣:

0000 0000 0000 0000 0ef3 

等等

因此被截斷的文件轉換爲十六進制。我需要它在UTF-8。在我寫入之前,如何確保文件是UTF-8?

+0

好了,所以截去在文件轉換爲十六進制。我需要它在UTF-8。在我寫入之前,如何確保文件是UTF-8? – 2012-03-02 22:10:38

+0

你在運行什麼操作系統?我只是在Ubuntu上運行它,它工作。指定UTF-8工作的 – Gazler 2012-03-02 22:13:19

回答

1

我無法想象,爲什麼截斷將返回十六進制字符,因爲它簡單地返回0

要打開一個文件進行讀取和使用UTF-8編碼(也here)寫:

File.open(name, "r+:UTF-8") 

此外,當您打開該文件並將其作爲Ruby kindly handles that傳遞給塊時,您不需要顯式關閉該文件。

紅寶石編碼的深入討論可參見here

+0

。謝謝! – 2012-03-03 00:39:29