sintax rails index escape ruby-on-rails ruby ruby-on-rails-3 haml

ruby on rails - rails - codificaciones de caracteres incompatibles: ASCII-8BIT y UTF-8



index haml (18)

Yo uso Ruby 1.9.2 y Rails 3.0.5

Tengo el siguiente error:

codificaciones de caracteres incompatibles: ASCII-8BIT y UTF-8

No tiene nada que ver con la base de datos, creo.

El error está yendo en esta línea en una vista (solo una llamada div haml):

#content

completa pila:

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8): 21: -flash.each do |name, msg| 22: =content_tag :div, msg, :id => "flash_#{name}" 23: %div.clear 24: #content 25: = yield 26: = render :partial => "layouts/grid_right" if render_grid_right? 27: = render :partial => "layouts/footer" app/views/layouts/application.html.haml:24:in `_app_views_layouts_application_html_haml___4380000789490545718_2180251300_2717546578298801795'' actionpack (3.0.5) lib/action_view/template.rb:135:in `block in render'' activesupport (3.0.5) lib/active_support/notifications.rb:54:in `instrument'' actionpack (3.0.5) lib/action_view/template.rb:127:in `render'' actionpack (3.0.5) lib/action_view/render/layouts.rb:80:in `_render_layout'' actionpack (3.0.5) lib/action_view/render/rendering.rb:62:in `block in _render_template'' activesupport (3.0.5) lib/active_support/notifications.rb:52:in `block in instrument'' activesupport (3.0.5) lib/active_support/notifications/instrumenter.rb:21:in `instrument'' activesupport (3.0.5) lib/active_support/notifications.rb:52:in `instrument'' actionpack (3.0.5) lib/action_view/render/rendering.rb:56:in `_render_template'' actionpack (3.0.5) lib/action_view/render/rendering.rb:26:in `render'' haml (3.0.25) lib/haml/helpers/action_view_mods.rb:13:in `render_with_haml'' actionpack (3.0.5) lib/abstract_controller/rendering.rb:115:in `_render_template'' actionpack (3.0.5) lib/abstract_controller/rendering.rb:109:in `render_to_body'' actionpack (3.0.5) lib/action_controller/metal/renderers.rb:47:in `render_to_body'' actionpack (3.0.5) lib/action_controller/metal/compatibility.rb:55:in `render_to_body'' actionpack (3.0.5) lib/abstract_controller/rendering.rb:102:in `render_to_string'' actionpack (3.0.5) lib/abstract_controller/rendering.rb:93:in `render'' actionpack (3.0.5) lib/action_controller/metal/rendering.rb:17:in `render'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:40:in `block (2 levels) in render'' activesupport (3.0.5) lib/active_support/core_ext/benchmark.rb:5:in `block in ms'' /Users/michaelkoper/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/benchmark.rb:309:in `realtime'' activesupport (3.0.5) lib/active_support/core_ext/benchmark.rb:5:in `ms'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:40:in `block in render'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:78:in `cleanup_view_runtime'' activerecord (3.0.5) lib/active_record/railties/controller_runtime.rb:15:in `cleanup_view_runtime'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:39:in `render'' actionpack (3.0.5) lib/action_controller/metal/implicit_render.rb:10:in `default_render'' actionpack (3.0.5) lib/action_controller/metal/mime_responds.rb:261:in `block in retrieve_response_from_mimes'' actionpack (3.0.5) lib/action_controller/metal/mime_responds.rb:192:in `call'' actionpack (3.0.5) lib/action_controller/metal/mime_responds.rb:192:in `respond_to'' app/controllers/home_controller.rb:9:in `index'' actionpack (3.0.5) lib/action_controller/metal/implicit_render.rb:4:in `send_action'' actionpack (3.0.5) lib/abstract_controller/base.rb:150:in `process_action'' actionpack (3.0.5) lib/action_controller/metal/rendering.rb:11:in `process_action'' actionpack (3.0.5) lib/abstract_controller/callbacks.rb:18:in `block in process_action'' activesupport (3.0.5) lib/active_support/callbacks.rb:445:in `_run__3968431659371141392__process_action__3163094469870857953__callbacks'' activesupport (3.0.5) lib/active_support/callbacks.rb:409:in `_run_process_action_callbacks'' activesupport (3.0.5) lib/active_support/callbacks.rb:93:in `run_callbacks'' actionpack (3.0.5) lib/abstract_controller/callbacks.rb:17:in `process_action'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'' activesupport (3.0.5) lib/active_support/notifications.rb:52:in `block in instrument'' activesupport (3.0.5) lib/active_support/notifications/instrumenter.rb:21:in `instrument'' activesupport (3.0.5) lib/active_support/notifications.rb:52:in `instrument'' actionpack (3.0.5) lib/action_controller/metal/instrumentation.rb:29:in `process_action'' actionpack (3.0.5) lib/action_controller/metal/rescue.rb:17:in `process_action'' actionpack (3.0.5) lib/abstract_controller/base.rb:119:in `process'' actionpack (3.0.5) lib/abstract_controller/rendering.rb:41:in `process'' actionpack (3.0.5) lib/action_controller/metal.rb:138:in `dispatch'' actionpack (3.0.5) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'' actionpack (3.0.5) lib/action_controller/metal.rb:178:in `block in action'' actionpack (3.0.5) lib/action_dispatch/routing/route_set.rb:62:in `call'' actionpack (3.0.5) lib/action_dispatch/routing/route_set.rb:62:in `dispatch'' actionpack (3.0.5) lib/action_dispatch/routing/route_set.rb:27:in `call'' rack-mount (0.6.13) lib/rack/mount/route_set.rb:148:in `block in call'' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:93:in `block in recognize'' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:68:in `optimized_each'' rack-mount (0.6.13) lib/rack/mount/code_generation.rb:92:in `recognize'' rack-mount (0.6.13) lib/rack/mount/route_set.rb:139:in `call'' actionpack (3.0.5) lib/action_dispatch/routing/route_set.rb:492:in `call'' haml (3.0.25) lib/sass/plugin/rack.rb:41:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/head.rb:14:in `call'' rack (1.2.1) lib/rack/methodoverride.rb:24:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/params_parser.rb:21:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/flash.rb:182:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/session/abstract_store.rb:149:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/cookies.rb:302:in `call'' activerecord (3.0.5) lib/active_record/query_cache.rb:32:in `block in call'' activerecord (3.0.5) lib/active_record/connection_adapters/abstract/query_cache.rb:28:in `cache'' activerecord (3.0.5) lib/active_record/query_cache.rb:12:in `cache'' activerecord (3.0.5) lib/active_record/query_cache.rb:31:in `call'' activerecord (3.0.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:354:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/callbacks.rb:46:in `block in call'' activesupport (3.0.5) lib/active_support/callbacks.rb:415:in `_run_call_callbacks'' actionpack (3.0.5) lib/action_dispatch/middleware/callbacks.rb:44:in `call'' rack (1.2.1) lib/rack/sendfile.rb:107:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/remote_ip.rb:48:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/show_exceptions.rb:47:in `call'' railties (3.0.5) lib/rails/rack/logger.rb:13:in `call'' rack (1.2.1) lib/rack/runtime.rb:17:in `call'' activesupport (3.0.5) lib/active_support/cache/strategy/local_cache.rb:72:in `call'' rack (1.2.1) lib/rack/lock.rb:11:in `block in call'' <internal:prelude>:10:in `synchronize'' rack (1.2.1) lib/rack/lock.rb:11:in `call'' actionpack (3.0.5) lib/action_dispatch/middleware/static.rb:30:in `call'' railties (3.0.5) lib/rails/application.rb:168:in `call'' railties (3.0.5) lib/rails/application.rb:77:in `method_missing'' railties (3.0.5) lib/rails/rack/log_tailer.rb:14:in `call'' rack (1.2.1) lib/rack/content_length.rb:13:in `call'' rack (1.2.1) lib/rack/chunked.rb:15:in `call'' rack (1.2.1) lib/rack/handler/mongrel.rb:67:in `process'' mongrel (1.2.0.pre2) lib/mongrel.rb:165:in `block in process_client'' mongrel (1.2.0.pre2) lib/mongrel.rb:164:in `each'' mongrel (1.2.0.pre2) lib/mongrel.rb:164:in `process_client'' mongrel (1.2.0.pre2) lib/mongrel.rb:291:in `block (2 levels) in run''

Mis gemas:

Using rake (0.8.7) Using RedCloth (4.2.2) Using abstract (1.0.0) Using activesupport (3.0.5) Using builder (2.1.2) Using i18n (0.5.0) Using activemodel (3.0.5) Using erubis (2.6.6) Using rack (1.2.1) Using rack-mount (0.6.13) Using rack-test (0.5.7) Using tzinfo (0.3.24) Using actionpack (3.0.5) Using mime-types (1.16) Using polyglot (0.3.1) Using treetop (1.4.9) Using mail (2.2.15) Using actionmailer (3.0.5) Using arel (2.0.9) Using activerecord (3.0.5) Using activeresource (3.0.5) Using authlogic (2.1.6) Using xml-simple (1.0.14) Using aws-s3 (0.6.2) Using block_helpers (0.3.3) Using bundler (1.0.10) Using diff-lcs (1.1.2) Using json (1.4.6) Using gherkin (2.3.4) Using term-ansicolor (1.0.5) Using cucumber (0.10.0) Using cucumber-rails (0.3.2) Using daemons (1.0.10) Using database_cleaner (0.6.5) Using factory_girl (1.3.3) Using faker (0.9.5) Using formtastic (1.2.3) Using gem_plugin (0.2.3) Using haml (3.0.25) Using thor (0.14.6) Using railties (3.0.5) Using rails (3.0.5) Using kaminari (0.10.4) Using mongrel (1.2.0.pre2) Using mysql2 (0.2.6) Using nokogiri (1.4.4) Using paperclip (2.3.8) Using rspec-core (2.5.1) Using rspec-expectations (2.5.0) Using rspec-mocks (2.5.0) Using rspec (2.5.0) Using yard (0.6.4) Using pickle (0.4.4) Using populator (1.0.0) Using rspec-rails (2.5.0) Using webrat (0.7.3)


ASCII-8BIT es la descripción de Ruby para los caracteres que están por encima del conjunto de caracteres ASCII 0-0x7f normal, y que son caracteres de un solo byte. Normalmente, eso sería algo así como ISO-8859-1, o uno de sus hermanos.

Si puede identificar qué personaje está causando el problema, puede decirle a Ruby 1.9.2 que convierta entre el juego de caracteres de ese carácter a UTF-8.

James Gray escribió una serie de blogs sobre este tipo de problemas y sobre cómo lidiar con ellos. Yo recomendaría revisarlos.

codificaciones de caracteres incompatibles: ASCII-8BIT y UTF-8

Esto suele suceder porque está tratando de concatenar dos cadenas y una contiene caracteres que no se asignan al conjunto de caracteres de la otra cadena. Hay caracteres en ISO-8859-1 que no tienen equivalentes en UTF-8, y viceversa, y cómo manejar la unión de cadenas con esas incompatibilidades requiere que el programador intervenga.



Encontré el error al migrar una aplicación de Ruby 1.8.7 a 1.9.3 y solo se produjo en producción. Resultó que tenía algunas sobras en mi tienda Memcache. La versión sensible a la codificación de Ruby 1.9.3 de mi aplicación intentó mezclar antiguos valores ASCII-8BIT con el nuevo UTF-8.

Fue tan simple como enjuagar el caché para arreglarlo por mí.


He experimentado un problema similar. Aunque tenía codificaciones UTF-8 resueltas (con mysql2 y Encoding.default_external = Encoding :: UTF_8 ...) codificaciones de caracteres incompatibles: UTF-8 y ASCII-8BIT surgieron cuando utilicé parámetros de ayuda incorrectos, por ejemplo, f.button :submit, "Zrušiť" - funciona perfectamente pero f.button "Zrušiť" - arroja un error de codificación.


Instalé el paquete de gemas mysql2.

gem install mysql2

y luego cambié el adaptador en mysql2 en database.yml.


La creación de documentos pdf con los rails-latex-gem conduce a un problema similar. Lo resolví modificando layouts/application.pdf.erb para

/begin{document} <%= yield.force_encoding("UTF-8") %> /end{document}


Lo resolví siguiendo estos pasos:

  • Asegúrese de que config.encoding = "utf-8" esté en el archivo application.rb.
  • Asegúrate de estar usando la gema ''mysql2''.
  • Ponga # encoding: utf-8 en la parte superior del archivo que contiene caracteres UTF-8.
  • Por encima de <App Name>::Application.initialize! línea en el archivo environment.rb, agregue las siguientes dos líneas:

    Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html


Obtuve el mismo mensaje de error críptico de Rails 4.1, Ruby 2.3.3 en un proyecto reciente, stacktrace originado en el diseño application.html.haml

Después de una búsqueda inútil, el culpable era un personaje UTF-8 que recientemente se había agregado al pie de página de todas las páginas. Por algún extraño motivo, el error solo aparecía intermitentemente.

Reemplazar el carácter UTF-8 con la secuencia de escape HTML correspondiente &#xHHHH; resuelto el problema

Espero que esto ahorre a otras personas en el futuro.


Para Haml puso una sugerencia de codificación:

-# coding: UTF-8

en la esquina superior izquierda de la página de Haml.


Para evitar un error "no se puede modificar la cadena congelada" para codificar una variable, puede usar: var.dup.force_encoding(Encoding::ASCII_8BIT) o var.dup.force_encoding(Encoding::UTF_8)


Solo para el registro: para mí resultó que era la gema llamada ''mysql'' ... obviamente esto está trabajando con US-ASCII de 8 bits por defecto. Así que cambiarlo a la gema llamada mysql2 (el 2 es el punto importante aquí) resolvió todos mis problemas.

Miré @ la lista de gemas publicada arriba - Michael Koper obviamente tiene instalado mysql2, pero publiqué esto en caso de que alguien también tenga este problema ... (me llevó algo de tiempo averiguarlo).

Si no le gusta esta respuesta, por favor comenten y la borraré.

PD: diéresis (ä, ö y ü) alemanes lo atornillaron con mysql


Sospecho que copió / pegó una parte de su plantilla Haml en el archivo, o está trabajando con un editor que no sea Unicode / no UTF-8.

Vea si puede volver a crear ese archivo desde cero en un editor amigable UTF-8. Hay mucho para cualquier plataforma y vea si esto soluciona su problema. Comience por borrar la línea con #content y #content escribirla manualmente.


Trate de encontrar la línea exacta que causa este problema y luego aplicar la codificación UTF8; esta solución funcionó para mí.

title.to_s.force_encoding ("UTF-8")


Tuve el mismo problema al analizar archivos CSV en Ruby 1.9.2 que se analizaron correctamente en Ruby 1.8. Encontré la respuesta here . Al abrir el archivo CSV con el módulo Ruby CSV, es necesario especificar el cifrado UTF-8 de la siguiente manera:

CSV.foreach("file.txt", encoding: "UTF-8") do |row| # foo and bar correctly encoded foo, bar, ... = row end


Tuve un problema similar en un archivo CoffeeScript personalizado. Lo resolví cambiando la codificación de la línea final de "Unix / Linux" a "Mac OS Classic"


Tuve un problema similar y el gem-scrub de gema lo solucionó automágicamente. https://github.com/hsbt/string-scrub Si la cadena dada contiene una secuencia de bytes no válida, entonces esa secuencia de bytes no válida se reemplaza con el carácter de reemplazo Unicode ( ) y se devuelve una nueva cadena.


es muy extraño que haya conocido este problema porque olvidé especificar el parámetro ''tipo''. p.ej:

add_column :cms_push_msgs, :android_title

que debería ser:

add_column :cms_push_msgs, :android_content, :string


puede forzar a UTF8 con force_encoding(Encoding::UTF_8) :

Ejemplo:

<%= yield.force_encoding(Encoding::UTF_8) %>