在ruby 1.9中.x、 我们可以用File.open('filename','r:iso-8859-1')指定编码.我通常更喜欢使用单行文件.read()如果我直接将许多短文件读入字符串.有没有一种方法可以直接指定编码,或者我必须求助于以下方法之一?

str = File.read('filename')
str.f或ce_encoding('iso-8859-1')

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

推荐答案

fine manual人中:

read(name, [length [, offset]], open_args) → string

打开文件,可以 Select 查找给定的offset字节,然后返回length字节(默认为文件的其余部分).read确保文件在返回之前关闭.

如果最后一个参数是散列,它将为internal open()指定选项.

所以你可以这样说:

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

Ruby相关问答推荐

Ruby Case语句和固定,不适用于attr_reader

我可以在Ruby中以散列的形式访问方法的关键字参数吗?

每次调用返回新的 REST 响应的 Ruby Rspec class_double

ruby:rubocop 抱怨将 if else 转换为 case 语句

有没有办法通过哈希初始化对象?

判断文件是否包含字符串

RSpec 是否有可能期望在两个表中发生变化?

如何找到安装 Ruby Gem 的路径(即 Gem.lib_path c.f. Gem.bin_path)

将 Ruby 哈希转换为 YAML

Jekyll - 找不到命令

如何验证 RSpec 中的退出和中止?

如何设置方法测试中使用的私有实例变量?

Ruby中的每个块都可以有一行吗?

rbenv install --list 不列出 2.1.2 版本

将 lambda 作为块传递

如何在 Ruby 中对数组进行分块

Ruby:如何为数组和哈希制作 IRB 打印 struct

Ruby:使用 ENV 变量(如果存在)的最简洁方法,否则使用默认值

检索/列出 Redis 数据库中的所有键/值对

如何在遍历数组时使用 Array#delete?