2010-10-22 5 views
7

Actualicé a RoR 3.0.1 y Ruby a 1.9.2. ¿Ahora todas las cadenas en mis vistas son ASCII-8BIT?¿Por qué todas las cadenas ASCII-8BIT después de actualizar a Rails 3?

creo que he puesto mi aplicación para utilizar UTF 8

application.rb

config.encoding = "utf-8" 

database.yml

development: 
    adapter: mysql 
    encoding: utf8 

estoy corriendo

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

yo esperaría que el enoding sería UTF-8 no ASCII

business.desc.encoding 
# ASCII-8BIT 

Desde 1.9.x puede concatenar cadenas de diferentes codificaciones que vemos una gran cantidad de errores de este tipo.

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

El error

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' 

¿Alguien más tiene este problema? Es ruby-1.9.2-p0 la versión correcta para usar?

Gracias!

+0

Su base de datos está realmente en utf-8, porque los argumentos de codificación no definen la codificación de la base de datos. Puede tener una base de datos en otra codificación – shingara

Respuesta

4

Tiene que agregar esto a cada.rb file:

<% # coding: UTF-8 %> 

Utilizo la magia magic_encoding para eso.

$ cd app/ 
$ magic_encoding 

El valor predeterminado es UTF-8, pero puede especificar lo que desee como argumento.

6

horrible problema. Es necesario poner esto en la parte superior de cada archivo

# coding: UTF-8 

UPDATE Utilice el magic_encoding como se describe sea Nerian.

Hace esencialmente lo mismo que el siguiente, pero mejor.

/ACTUALIZACIÓN

tengo una tarea rake No recuerdo donde he encontrado (felicitaciones a ese tipo!) Que poco he modificados, que esta en la parte superior de cada archivo. He oído a gente decir lo anterior (lo que has hecho) debería ser suficiente, pero no funciona para mí ...

De todos modos, esta es la tarea rastrillo, simplemente copiar pegar


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

Me estoy moviendo de Ruby 1.8.6 y Rails 2.3.5 a Ruby 1.9.2 y Rails 3.0.3, con postregsql. Con el fin de conseguir este trabajo en mi proyecto, que tenía que hacer añadir esto a la parte superior de cualquiera de mis plantillas de vista que se está traduciendo:

<% # coding: UTF-8 %> 

La tarea rastrillo proporcionada por Ole debe ser fácil de modificar para hacerlo esto también Sin embargo, no encontré que su solución haya tenido ningún efecto.

+0

Hah ... ¡parece que me derrotaron en 20 minutos! ¿Cuáles son las posibilidades en una pregunta de 3 meses de edad? Ese es un buen consejo sobre la gema magic_encoding, definitivamente lo intentaré yo mismo. –

Cuestiones relacionadas