【发布时间】:2011-05-23 18:28:43
【问题描述】:
我有一个 ISO-8859-1 编码的 csv 文件,我尝试用 ruby 打开和解析它:
require 'csv'
filename = File.expand_path('~/myfile.csv')
file = File.open(filename, "r:ISO-8859-1")
CSV.parse(file.read, col_sep: "\t") do |row|
puts row
end
如果我在调用 File.open 时省略了编码,我会收到错误
ArgumentError: UTF-8 中的无效字节序列
我的问题是对puts row 的调用显示奇怪的字符而不是挪威字符æ,ø,å:
BOKF.RINGSDATO
如果我在 textmate 中打开文件,我会得到相同的结果,强制它使用 UTF-8 编码。
通过将文件内容分配给字符串,我可以检查用于字符串的编码。正如预期的那样,它显示 ISO-8859-1。
那么当我puts每一行时,为什么它输出字符串为UTF-8?
与 csv 库有关吗?
我使用 ruby 1.9.2。
【问题讨论】:
-
您的代码在这里运行良好(ubuntu 上的 Ruby 1.9.2)。