【问题标题】:Why does file.truncate convert my file to 0's in ruby?为什么 file.truncate 在 ruby​​ 中将我的文件转换为 0?
【发布时间】:2012-03-21 09:31:19
【问题描述】:

我有这个代码:

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

等等……

所以 truncate 正在将文件转换为十六进制。我需要它在 UTF-8 中。在写入文件之前如何确保文件是 UTF-8?

【问题讨论】:

  • 好的,所以 truncate 正在将文件转换为十六进制。我需要它在 UTF-8 中。在写入文件之前如何确保文件是 UTF-8?
  • 您运行的是什么操作系统?我刚刚在 Ubuntu 上运行它,它工作正常。
  • 您可以使用sed 命令行实用程序获得相同的结果。

标签: ruby-on-rails ruby file truncate


【解决方案1】:

我无法想象为什么 truncate 会返回十六进制字符,因为它只是返回 0。

使用 UTF-8 编码(也称为here)打开文件进行读写:

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

此外,您无需在打开文件时显式关闭文件,并在块退出时将其作为 Ruby kindly handles that 传递给块。

可以找到关于 Ruby 编码的深入讨论 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2020-11-12
    • 2016-11-18
    相关资源
    最近更新 更多