2010-10-22 58 views
7

我升級到RoR 3.0.1和Ruby 1.9.2。 現在我的視圖中的所有字符串都是ASCII-8BIT?爲什麼升級到Rails 3後,所有的字符串都是ASCII-8BIT?

我相信我有我的應用程序設置爲使用UTF-8

application.rb中

config.encoding = "utf-8" 

的database.yml

development: 
    adapter: mysql 
    encoding: utf8 

我跑

OS X 
RVM rvm 1.0.16 
Ruby ruby-1.9.2-p0 
Rails 3.0.1 

我期望的enoding是UTF-8不ASCII

business.desc.encoding 
# ASCII-8BIT 

由於1.9.x的可以連接我們看到了很多這樣的錯誤,不同編碼的字符串。

<p class="description"><%= truncate(business.desc, :length => 17) %></p> 

的錯誤

incompatible character encodings: ASCII-8BIT and UTF-8 

activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat' 
activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat' 
actionpack (3.0.1) lib/action_view/template/handlers/erb.rb:14:in `<<' 
app/views/browse/businesses.html.erb:15:in `block in _app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092' 
app/views/browse/businesses.html.erb:3:in `each' 
app/views/browse/businesses.html.erb:3:in `each_with_index' 
app/views/browse/businesses.html.erb:3:in `_app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092' 

沒有任何人有這個問題? ruby-1.9.2-p0是否使用正確的版本?

謝謝!

+0

您的數據庫真的在utf-8中,因爲編碼參數沒有定義數據庫編碼。你可以使用其他編碼的數據庫 – shingara 2010-10-23 11:13:54

回答

4

您需要將其添加到每個。rb文件:

<% # coding: UTF-8 %> 

我使用gem magic_encoding。

$ cd app/ 
$ magic_encoding 

默認值是UTF-8,但您可以指定任何您想要的參數。

6

可怕的問題。您需要將其置於每個文件的頂部

# coding: UTF-8 

更新使用magic_encoding,如Nerian所述。

與下面基本相同,但更好。

/UPDATE

我有一個rake任務,我不記得在那裏我發現了我稍微修改(榮譽那傢伙!),有這個在每個文件的頂部。我聽人說上面(你做了什麼)應該是足夠的,但它不爲我工作...

總之,這是rake任務,只需複製粘貼


lib/tasks/utf8encode.rake 

# coding: UTF-8 

desc "Manage the encoding header of Ruby files" 
task :utf8_encode_headers => :environment do 
    files = Array.new 
    ["*.rb", "*.rake"].each do |extension| 
    files.concat(Dir[ File.join(Dir.getwd.split(/\\/), "**", extension) ]) 
    end 

    files.each do |file| 
    content = File.read(file) 
    next if content[0..16] == "# coding: UTF-8\n\n" || 
      content[0..22] == "# -*- coding: utf-8 -*-" 

    ["\n\n", "\n"].each do |file_end| 
     content = content.gsub(/(# encoding: UTF-8#{file_end})|(# coding: UTF-8#{file_end})|(# -*- coding: UTF-8 -*-#{file_end})|(# -*- coding: utf-8 -*-#{file_end})/i, "") 
    end 

    new_file = File.open(file, "w") 
    new_file.write("# coding: UTF-8\n\n"+content) 
    new_file.close 
    end 
end 
2

我正在從Ruby 1.8.6和Rails 2.3.5遷移到Ruby 1.9.2和Rails 3.0.3,並帶有postregsql。爲了讓我的項目這方面的工作,我不得不這樣做增加了正在翻譯的我的任何視圖模板頂部:

<% # coding: UTF-8 %> 

由OLE提供的rake任務應該很容易修改做這也是。儘管如此,我沒有發現他的解決方案有任何效果。

+0

哈......看起來我被打了20分鐘!一個3個月大的問題有什麼機會。這是magic_encoding gem的一個很好的提示 - 我一定會自己嘗試。 – 2011-01-08 19:55:24

相關問題