С ruby> = 1.9.2 вы можете использовать режим r:bom|utf-8
Это должно работать (я не проверял его в сочетании с json):
json = nil #define the variable outside the block to keep the data
File.open('file.txt', "r:bom|utf-8"){|file|
json = JSON.parse(file.read)
}
Не имеет значения, доступна ли спецификация в файле или нет.
Эндрю заметил, что File#rewind
нельзя использовать с спецификацией.
Если вам нужна функция перемотки, вы должны запомнить положение и заменить rewind
на pos=
:
#Prepare test file
File.open('file.txt', "w:utf-8"){|f|
f << "\xEF\xBB\xBF" #add BOM
f << 'some content'
}
#Read file and skip BOM if available
File.open('file.txt', "r:bom|utf-8"){|f|
pos =f.pos
p content = f.read #read and write file content
f.pos = pos #f.rewind goes to pos 0
p content = f.read #(re)read and write file content
}