2012-07-26 7 views
23

W Ruby 1.9.x możemy określić kodowanie przy pomocy File.open('filename','r:iso-8859-1'). Często wolę używać jednoliniowego pliku File.read(), jeśli czytam wiele krótkich plików bezpośrednio na ciągi. Czy istnieje sposób, w jaki mogę określić kodowanie bezpośrednio, czy muszę uciec się do jednego z poniższych?Czy Ruby zapewnia metodę File.read() z określonym kodowaniem?

str = File.read('filename') 
str.force_encoding('iso-8859-1') 

lub

f = File.open('filename', 'r:iso-8859-1') 
s = '' 
while (line = f.gets) 
    s += line 
end 
f.close 

Odpowiedz

41

Z fine manual:

odczytu (nazwa, [długość [, offset]] open_args) → ciąg

Otwiera plik , opcjonalnie szuka podanego offset, a następnie zwraca length bajtów (domyślnie względem reszty pliku). read zapewnia, że ​​plik zostanie zamknięty przed powrotem.

Jeśli ostatni argument jest hashem, określa opcję wewnętrznego otwarcia().

Więc można powiedzieć takie rzeczy:

>> s = File.read('pancakes', :encoding => 'iso-8859-1') 
>> s.encoding 
=> #<Encoding:ISO-8859-1> 
Powiązane problemy