2011-03-29 58 views
1

我只有這兩條線紅寶石文件:紅寶石1.9 - 無效的多字節字符(UTF-8)

# encoding: utf-8 
puts "—" 

當我與ruby test_enc.rb運行它,它失敗:

test_enc.rb:2: invalid multibyte char (UTF-8) 
test_enc.rb:2: unterminated string meets end of file 

我不知道如何正確指定(emdash)的字符代碼,但vim告訴我它是151, Hex 97, Octal 227。它與其他字符如ã的失敗方式一樣,所以我懷疑它是否與該字符特別相關。 我在Windows XP上運行和紅寶石的版本,我使用的是:

ruby 1.9.1p430 (2010-08-16 revision 28998) [i386-mingw32] 

我覺得有一些很明顯的,我在這裏失蹤。有任何想法嗎?

編輯:瞭解了今天有關假設的寶貴經驗 - 特別假設您的編輯器正在使用UTF-8而沒有實際檢查它。哎呀!

感謝您快速準確的回覆!

再次編輯:'爲utf-8正確設置vim'變得太大了,與這個問題無關,所以現在是separate question

+0

你確定它不是編碼:utf-8? (而不是編碼)。 – 2011-03-29 16:52:40

+0

兩者都做同樣的事情。你實際上可以放入'asdfgibberishcoding:utf-8',它的工作原理是一樣的。 – 2011-03-29 16:54:45

+0

'puts _ENCODING_'是什麼意思? (添加一個_ _ _ _ _ _ _ _ _ _ _ _ _ _ _的每個部分)。 – 2011-03-29 16:57:58

回答

5

鑑於Ruby明確地將您的注意力轉向了UTF-8,我強烈懷疑您沒有真正寫出一個開頭的UTF-8文件。確保Vim(或者你用來創建文件的任何文本編輯器)是真的設置爲寫出UTF-8。

請注意,在UTF-8中,任何非ASCII字符都將由多個字節表示,而不是像您從Vim診斷程序中描述的單個字節。我建議使用二進制文件編輯器(或轉儲,或其他)真的顯示文本文件中的內容。一些沒有預先設定編碼概念的東西 - 甚至沒有試圖將其視爲文本文件。

記事本可以讓你用UTF-8編寫一個文件,所以你可能想試試看看會發生什麼。 (我自己沒有安裝Ruby,否則我會爲你嘗試。)

+0

我剛剛有同樣的想法 - 什麼是vim *實際上*保存文件爲? 當我檢查我看到它的編碼設置爲'latin1'。我想知道爲什麼這些數字不符合我在[here]中看到的內容(http://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=1024&unicodeinhtml=dec)。 – 2011-03-29 17:01:00

+0

將編碼設置爲「ISO-8859-1」(以匹配我的編輯器實際使用的內容)似乎可以解決此問題。當我打印出來的時候,我仍然會看到'ù',但我很確定這只是一個Windows終端問題。 – 2011-03-29 17:06:42

+1

@Nick:與其更改文件中的編碼,不如更改編輯器使用的內容?那麼你不會僅限於Latin-1,這是一個相當小的字符範圍。我敢肯定* Vim必須支持其他編碼... – 2011-03-29 17:09:21

3

您的文件在latin1中。 Ruby是對的。

emdash將被編碼在UTF-8中的兩個字節中。

+0

謝謝,您的評論是現貨。 :) – 2011-03-29 17:11:50

+1

三,實際上:'0xE2 0x80 0x94'。 – 2011-03-29 17:55:50

+0

@Jörg:這就是我不想檢查的原因;) – 2011-03-29 19:54:26