Я использую этот маленький рубин:
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]
Спасибо!
Обновление:
Шестнадцатеричный дамп файла сдополнительный символ (спецификация):
ubuntu:~$ hexdump new.board
0000000 bbef 2ebf 2e2e 0a0d 0a0d
000000a