Почему file.truncate конвертирует мой файл в 0 в ruby? - PullRequest
0 голосов
/ 03 марта 2012

У меня есть этот код:

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

, и он должен заменить ApplicationController на AdminController, затем обрезать файл, затем написать новое содержимое, а затем закрыть его.

Однакокогда он усекает файл, а затем записывает в него, он выглядит следующим образом:

0000 0000 0000 0000 0ef3

и т. д. *

Таким образом, truncate преобразует файл в шестнадцатеричный формат.Мне это нужно в UTF-8.Как я могу убедиться, что файл UTF-8, прежде чем я напишу в него?

1 Ответ

1 голос
/ 03 марта 2012

Я не могу себе представить, почему truncate будет возвращать шестнадцатеричные символы, поскольку он просто возвращает 0.

Чтобы открыть файл для чтения и записи в кодировке UTF-8 (также здесь ):

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

Кроме того, вам не нужно явно закрывать файл при его открытии и передавать его в блок, поскольку Ruby любезно обрабатывает это для вас при выходе из блока.

Подробное обсуждение кодировки Ruby можно найти здесь

...