2012-01-28 55 views
8

直到最近一切都在我的機器上正常工作,但幾天後,我一直在收到一個錯誤Encoding::UndefinedConversionError: U+2713 from UTF-8 to US-ASCII我發佈的東西從瀏覽器到服務器。Ruby 1.9.3 UndefinedConversionError

首先因爲帖子參與我試圖用增加編碼到database.yml中最明顯的事情:

development: 
    adapter: postgresql 
    hostname: localhost 
    port: 5432 
    username: mikael 
    password: 
    database: dev 
    encoding: utf8 

如果我安裝紅寶石debug19和紅寶石調試base19與運行軌道:

rails s --environment=development --debug 

現在一切工作正常。我該如何找出問題的原因,以便我可以修復它?

編輯1:

1.9.3p0 :001 > Encoding.default_internal 
=> #<Encoding:UTF-8> 
1.9.3p0 :002 > Encoding.default_external 
=> #<Encoding:UTF-8> 

編輯2: 如果我在生產模式下運行一切正常。

+0

'U + 2713'是rails在最新版本中使用的複選標記('utf8 =✓'),用於驗證您是否能夠使用UTF-8數據。確定你沒有更新任何東西? – phoet 2012-01-28 12:59:53

+0

請運行rails控制檯並檢查'Encoding.default_internal'和'Encoding.default_external'。 – taro 2012-01-28 13:50:20

+1

錯誤來自哪裏?你的代碼或Rails內部的某個地方? – 2012-01-28 16:43:34

回答

1

這聽起來像是已報道的Rails 3.1.2 bugworkaround和1.9.3的下一個版本應該可以解決這個問題

+1

多數民衆贊成它和它看起來像軌道3.2帶回了相同的舊bug在3.1.2中修復,或者它可能是造成它的寶石。 – mhenrixon 2012-02-01 20:49:27

+0

解決方法鏈接不可用,請重新發布它? – Rizon 2013-02-11 23:06:49

14

試着在你的shell設置LC_ALLLANG變量。根據您的系統,將這些行添加到〜/ .profile,〜/ .bash_profile,〜/ .zprofile或類似的地方。

export LC_ALL=en_US.UTF-8 
export LANG=en_US.UTF-8 

您可以通過運行locale -a來獲取所有語言環境的列表。在最後你應該會看到類似的,當你在一個新的終端窗口中運行locale

LANG="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_CTYPE="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_ALL="en_US.UTF-8" 
+0

在windows系統中呢? – rony36 2014-02-16 12:47:32

+0

@ rony36我猜你應該導出這些變量,它也應該修復這些錯誤。看看這裏如何做到這一點http://superuser.com/a/284351/79208 – Lenart 2014-02-17 15:00:39

+0

真棒修復,謝謝。水豚'把page.html'扔了一個類似的錯誤,這工作。 – 2014-05-05 18:08:49

0

我的Rails服務器從它記錄器類拋出這個確切的錯誤。

通過升級到Rails latest(3.2.13),它消失了。我只是改變了我的Gemfile並做了一個包更新尾巴。

3

今天我有這個問題。根據Lenart的回答,我的LC_ALL是空白的,但其他一切看起來都是正確的。改變LC_ALL也沒有爲我解決它。

我的項目解決方案是將rspec從2.14.6更新到2.14.7。