2010-10-22 4 views
7

Ho eseguito l'aggiornamento a RoR 3.0.1 e Ruby alla versione 1.9.2. Ora tutte le stringhe nelle mie viste sono ASCII-8BIT?Perché tutte le stringhe ASCII-8BIT dopo l'aggiornamento a Rails 3?

Credo di avere la mia applicazione impostato per utilizzare UTF 8

application.rb

config.encoding = "utf-8" 

database.yml

development: 
    adapter: mysql 
    encoding: utf8 

sto correndo

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

mi aspetto che l'enoding sarebbe UTF 8 non ASCII

business.desc.encoding 
# ASCII-8BIT 

Dal 1.9.x può concatenare le stringhe di diverse codifiche che vediamo un sacco di errori di questo tipo.

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

L'errore

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' 

Qualcun altro ha questo problema? Ruby-1.9.2-p0 è la versione corretta da usare?

Grazie!

+0

Il database è in realtà in utf-8, poiché la codifica non definisce la codifica del database. Puoi avere un database in un'altra codifica – shingara

risposta

4

È necessario aggiungerlo a tutti.file rb:

<% # coding: UTF-8 %> 

Io uso la gemma magic_encoding per quello.

$ cd app/ 
$ magic_encoding 

L'impostazione predefinita è UTF-8, ma è possibile specificare qualsiasi argomento come argomento.

6

problema orribile. Hai bisogno di mettere questo nella parte superiore di ogni file

# coding: UTF-8 

UPDATE Utilizzare la magic_encoding come descritto BE Nerian.

Fa esattamente come il sotto, ma meglio.

/UPDATE

Ho un compito rastrello non mi ricordo dove ho trovato (complimenti a quel ragazzo!) Che ho leggermente modificati, di avere questo in cima ad ogni file. Ho sentito gente dire quanto sopra (quello che hai fatto) dovrebbe essere sufficiente, ma non funziona per me ...

In ogni caso, questo è il compito rastrello, basta copiare e incollarlo


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

Sto passando da Ruby 1.8.6 e Rails 2.3.5 a Ruby 1.9.2 e Rails 3.0.3, con postregsql. Al fine di ottenere questo lavoro sul mio progetto, ho dovuto fare aggiungere questo alla parte superiore di uno dei miei modelli di vista che erano in fase di traduzione:

<% # coding: UTF-8 %> 

Il compito rake fornito da Ole dovrebbe essere facile da modificare per fare anche questo. Non ho trovato la sua soluzione come dato ha avuto alcun effetto, però.

+0

Hah ... sembra che sia stato battuto da 20 minuti! Quali sono le possibilità su una domanda di 3 mesi. Questo è un buon consiglio sulla gemma magic_encoding - ci proverò sicuramente. –