私はこの小さなルビーを使用しています:
File.open(ARGV[0], "r").each_line do |line|
puts "encoding: #{line.encoding}"
line.chomp.split(//).each do |char|
puts "[#{char}]"
end
end
そして、ファイルにフィードしているサンプルファイルがあり、3 つのピリオドと改行だけが含まれています。
このファイルを utf-8 のファイル エンコーディング (vim: でset fileencoding=utf-8
) で保存し、このスクリプトを実行すると、次の出力が得られます。
encoding: UTF-8
[]
[.]
[.]
[.]
そして、fileencoding を 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) を含むファイルの 16 進ダンプ:
ubuntu:~$ hexdump new.board
0000000 bbef 2ebf 2e2e 0a0d 0a0d
000000a