【发布时间】:2011-08-23 18:22:09
【问题描述】:
我正在尝试使用 Ruby 1.9 读取文本文件并将它们转换为我自己的 XML 结构。我无法控制源文本文件,因此它们可以采用任何编码。
这是我目前所做的:
lines = File.readlines(input_file)
lines.each do |line|
#do something
end
我对包含 é 字符 (xE9) 的文件有疑问。当我尝试处理相应的行时,当我在字符串上调用 .match(...) 时,我得到一个 Invalid byte sequence in UTF-8 异常。
我尝试使用Fixing invalid UTF-8 in Ruby, revisited 中描述的解决方法
lines = File.readlines(input_file)
ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
lines.each do |line|
unless line.empty?
valid_string = ic.iconv(line + ' ')[0..-2]
#do something
end
end
但这只是从行中删除é 字符,这不是我想要的。
我认为真正的问题是文件本身似乎不是 UTF-8 格式,而是使用了一些 ANSI 编码。虽然文件不是 UTF-8,但调用 .encoding 时生成的 line 对象说它是 UTF-8;我的猜测是我需要使用不同的方式来读取文件,以便它适用于 ANSI 和 UTF-8 文件,但我是 Ruby 初学者,我真的不知道从哪里开始。
【问题讨论】:
-
这是什么 ANSI 东西?这是一个虚构的名字吗?
-
我认为这是文件使用的实际编码:en.wikipedia.org/wiki/Windows-1252,但我看不到在 ruby 中确定的方法。