2012-10-01 17 views
0

我剛剛將我的Ruby版本從1.8.7升級到1.9.2(使用RVM)。所以Ruby是:ruby 1.9.3p194(2012-04-20修訂版35410)[x86_64-darwin12.2.0]。該應用程序在Rails 3.2.8上。自升級以來,我收到一個關於多字節字符的錯誤。Ruby 1.9中無效的多字節字符,設置編碼:utf-8不能修復它

我發現多個計算器上非常相似的問題,但沒有在他們的解決方案,爲我工作:

Ruby 1.9 - invalid multibyte char (US-ASCII)invalid multibyte char (US-ASCII) with Rails and Ruby 1.9Rails 3.1, Ruby 1.9.2-p180 and UTF-8 issues

當我開始我的應用程序,並嘗試瀏覽到它,我出現多個錯誤,例如:

SyntaxError (/Users/antun/ror/parktwor3svn/app/helpers/application_helper.rb:35: 無效的多字節字符(UTF-8) /Users/antun/ror/parktwor3svn/app/helpers/application_helper.rb: 35: 語法錯誤,意想不到的tIDENTIFIER,期待 ']' ......美國 「 」阿富汗「, 」土地羣島「, 」阿爾巴尼亞「,」 阿爾及爾...

有問題的代碼(在? app/helpers/application_helper.rb)看起來像這樣。爲簡潔起見,我將它簡化爲前幾個國家 - 「奧蘭羣島」中的「Å」是觸發它的角色之一。當我在編輯器中查找那個角色時,我得到:00c5。 (其他國家/地區名稱中有更多的unicode字符)。

def countries 
    return ["", "United States", "Afghanistan", "Åland Islands", "Albania"] 
    end 

到目前爲止,我已經嘗試添加下列到應用程序/傭工/ application_helper.rb 作爲第一行來解決它:

# encoding: UTF-8 

# encoding: utf-8 

# -*- coding: utf-8 -*- 

這些都沒有工作。

我的config/application.rb中有:

config.encoding = "utf-8" 

我的文本編輯器是VIM,當我做:集編碼,在該文件上,它返回: 「編碼= UTF-8」。

回答

0

使用工具如OD(假設你是在Linux上)看文件的實際內容。如果你有單字節C5,你的文件不是UTF-8。它可能存儲在ISO-8859-1或類似的文件中,Ruby非常正確地抱怨。

+0

謝謝!這使我朝着正確的方向前進。我在OSX上,所以我使用命令「file -I app/helpers/application_helper.rb」發現它實際上保存在charset = iso-8859-1中。然後我再次在VIM中編輯它,並通過調用set fileencoding = utf-8來糾正它。 (事實證明,在VIM中,調用:set編碼不會更改文件的編碼;我在這裏發現:http://stackoverflow.com/a/1459612/1597106)。 – antun

相關問題