由于编码不同,Ruby和Mac OS中的文件读取差异

由于编码不同,Ruby和Mac OS中的文件读取差异,ruby,file,encoding,Ruby,File,Encoding,我在mac上有一个文件test.conf。我从web位置下载了它作为应用程序/octet 当我使用命令行检查mime类型时,我得到: file -Ib ~/test.conf text/plain; charset=us-ascii 但在Ruby的IRB中,我将其视为utf-8: irb(main):039:0> f = File.open("test.conf") => #<File:test.conf> irb(main):040:0> f.exte

我在mac上有一个文件test.conf。我从web位置下载了它作为应用程序/octet

当我使用命令行检查mime类型时,我得到:

 file -Ib ~/test.conf 
 text/plain; charset=us-ascii
但在Ruby的IRB中,我将其视为utf-8:

 irb(main):039:0> f = File.open("test.conf")
 => #<File:test.conf>
irb(main):040:0> f.external_encoding
=> #<Encoding:UTF-8>
irb(main):041:0> contents = f.read
irb(main):042:0> contents.encoding
=> #<Encoding:UTF-8>

因此,我的难题是,如何确保Ruby看到的行数与
cat
命令的行数相同?

回答我自己的问题:由于我的文件大小很小,我使用了以下方法:

    content = File.open("test.conf",'r:UTF-8',&:read) 
    content.lines.each do |l|
      < do whatever with l > 
    end 
content=File.open(“test.conf”、'r:UTF-8'、&:read)
content.lines.each do|l|
<用l做任何事>
结束

谢谢你

Ruby看到的是52个符号,而不是52行。文件使用一组规则来确定文件的内容,但它很难穷尽,也很容易被愚弄,尤其是在处理文件中包含变音符号的文档时。您可以询问服务主机它认为编码是什么,但这也可能是错误的。有时,唯一的解决方案是基于您对文件真正编码的预先了解。我们不知道你的档案里有什么,所以我们给你的任何答案都是胡乱猜测。也许您应该将文件减少到最低限度,以演示问题并将其添加到问题中?
    content = File.open("test.conf",'r:UTF-8',&:read) 
    content.lines.each do |l|
      < do whatever with l > 
    end