2013-07-09 46 views
2

我試圖從DB遷移中的某些用戶名創建一個slug。UTF-8的gsub編碼問題

nick = nick.gsub('á','a') 

我真的很想換éíóúñeioun

這樣做,它不工作,我會得到:

不兼容的編碼正則表達式匹配(UTF-8正則表達式與ASCII-8BIT字符串)(編碼:: CompatibilityError)

但是,無論我做什麼,例如通過增加force_encoding方法,我總是得到這樣的編碼錯誤:在

無效字節序列UTF-8(引發ArgumentError)

「\ XF3」 從ASCII-8BIT爲UTF-8(編碼:: UndefinedConversionError)

不兼容的字符編碼:ASCII-8BIT和UTF-8(編碼:: CompatibilityError)

這只是當我有一個gsub改變那些聲樂或西班牙語字母時發生。

我的文件上還有一個encoding: utf-8行,數據來自UTF-8數據庫。但似乎沒有任何幫助。

我已經看到了一些關於這個問題,但我試圖做的任何事情都不能解決它。

順便說一句,這不是鐵軌相關的。

+0

你使用哪個ruby版本? – tessi

+0

我使用** Ruby 1.9.3 ** – pzin

+0

這組有趣的編程任務和一組編碼相關的編程任務之間沒有交集。 – tessi

回答

1

我終於用音譯 Rails中的ActiveSupport:

require 'active_support/all' 
v = ActiveSupport::Inflector.transliterate v.downcase 
v.gsub(/[^a-z1-9]+/, '-').chomp('-') 

工作正常。

+0

看起來像你需要添加魔術編碼註釋在你的ruby文件'#coding:utf-8'的開頭# –

+0

如果你閱讀這個問題,你會注意到我正在使用它。 – pzin

+0

對不起我的壞。但是你確定你把魔術評論放在正確的地方嗎?我只是做了一個沒有意義的遷移的簡單測試,「p」éíóúñ「.gsub(/é/,'e')'。沒有神奇的評論,我得到了'無效的多字節字符(US-ASCII)',正如所料。有了這個神奇的評論,沒關係。我正在運行紅寶石1.9.2和軌3.2.11 –