我正在使用一点点红宝石:
File.open(ARGV[0], "r").each_line do |line|
puts "encoding: #{line.encoding}"
line.chomp.split(//).each do |char|
puts "[#{char}]"
end
end
而且我有一个示例文件,我在文件中提供的文件只包含三个句点和一个换行符。
当我使用 utf-8 的文件编码(在 vim: 中set fileencoding=utf-8
)保存此文件并在其上运行此脚本时,我得到以下输出:
encoding: UTF-8
[]
[.]
[.]
[.]
然后,如果我将文件编码更改为 latin1(在 vim: 中set fileencoding=latin1
)并运行脚本,我不会得到第一个空白字符:
encoding: UTF-8
[.]
[.]
[.]
这里发生了什么?我知道 utf8 编码在文件的开头放置了一些字节以将文件标记为 utf8 编码,但我认为在处理文本时它们应该是不可见的(即:ruby 运行时应该处理它们)。我错过了什么?
顺便提一句:
ubuntu:~$ ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29034) [i686-linux]
谢谢!
更新:
带有额外字符(BOM)的文件的十六进制转储:
ubuntu:~$ hexdump new.board
0000000 bbef 2ebf 2e2e 0a0d 0a0d
000000a