2
我使用紅寶石的這一點點:文件編碼在ruby中生成空白字符 - 爲什麼?
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的fileencoding此文件(VIM:set fileencoding=utf-8
),並在其上運行此腳本,我得到這樣的輸出:
encoding: UTF-8
[]
[.]
[.]
[.]
然後,如果我改變fileencoding爲latin1(在vim:set fileencoding=latin1
),然後運行該腳本,我沒有得到第一空白字符:
encoding: UTF-8
[.]
[.]
[.]
這是怎麼回事?據我所知,utf8編碼在文件的開頭放置了一些字節,以便將文件標記爲utf8編碼,但我認爲在處理文本時它們應該是不可見的(即:ruby運行時應該處理它們)。我錯過了什麼?
BTW:
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
在vim中以utf8文件編碼保存的文件具有「\ u {feff}在data.dump輸出開始時,latin1文件沒有任何內容。 – 2010-10-01 06:34:49
因此,這將建議我認爲,無論磁盤上的內容是什麼,ruby都將文件視爲utf8,並且不正確地處理BOM? (即:將其視爲字符,而不是編碼提示) – 2010-10-01 06:36:18
@Stewart - 這是utf-16 BOM,我不知道爲什麼會出現這種情況。 – 2010-10-01 06:36:49