J’utilise Ruby 1.9.2 et Rails 3.0.5
J’ai l’erreur suivante:
encodages de caractères incompatibles: ASCII-8BIT et UTF-8
Cela n’a rien à voir avec la firebase database, je pense.
L’erreur se produit sur cette ligne dans une vue (juste un appel div haml):
#content
un paquet entier:
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_ssortingng' 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 resortingeve_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' :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'
Mes gemmes:
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 erbuy (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)
Je soupçonne que vous avez copié / collé une partie de votre modèle Haml dans le fichier ou que vous travaillez avec un éditeur non Unicode / non-UTF-8.
Voyez si vous pouvez recréer ce fichier à partir de zéro dans un éditeur convivial UTF-8. Il y en a beaucoup pour n’importe quelle plate-forme et voyez si cela résout votre problème. Commencez par effacer la ligne avec #content
et en la retapant manuellement.
Je l’ai résolu en suivant ces étapes:
config.encoding = "utf-8"
trouve dans le fichier application.rb. # encoding: utf-8
en haut du fichier contenant des caractères UTF-8. Au-dessus du
ligne dans le fichier environment.rb, ajoutez les deux lignes suivantes:
Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8
http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html
Essayez de trouver la ligne exacte à l’origine de ce problème, puis appliquez le codage UTF8, cette solution a fonctionné pour moi.
title.to_s.force_encoding (“UTF-8”)
ASCII-8BIT est la description de Ruby pour les caractères au-dessus du jeu de caractères ASCII 0-0x7f normal, et qui sont des caractères à un octet. Typiquement, ce serait quelque chose comme ISO-8859-1, ou l’un de ses frères et sœurs.
Si vous pouvez identifier le caractère à l’origine du problème, vous pouvez indiquer à Ruby 1.9.2 de convertir le jeu de caractères de ce caractère en UTF-8.
James Gray a écrit une série de blogs traitant de ce genre de problèmes et de la manière de les gérer. Je recommande de passer par eux.
encodages de caractères incompatibles: ASCII-8BIT et UTF-8
Cela se produit généralement parce que vous essayez de concaténer deux chaînes et que l’une contient des caractères qui ne correspondent pas au jeu de caractères de l’autre chaîne. Il y a des caractères dans ISO-8859-1 qui n’ont pas d’équivalents dans UTF-8, et vice-versa, et comment gérer la jointure de chaînes avec ces incompatibilités, le programmeur doit intervenir.
J’ai installé le paquet gem mysql2.
gem install mysql2
et puis j’ai changé l’adaptateur dans mysql2 dans database.yml.
Pour Haml mettre un indice d’encodage:
-# coding: UTF-8
en haut à gauche de la page Haml.
vous pouvez forcer UTF8 avec force_encoding(Encoding::UTF_8)
:
Exemple:
<%= yield.force_encoding(Encoding::UTF_8) %>
Le problème était l’utilisation de citations incorrectes autour de la version iOS. Assurez-vous que toutes vos citations sont “et non” ou “”.
J’ai connu un problème similaire. Bien que mes encodages UTF-8 aient été résolus (avec mysql2 et Encoding.default_external = Encoding :: UTF_8 …) des encodages de caractères incompatibles: UTF-8 et ASCII-8BIT sont apparus lorsque j’ai utilisé des parameters d’assistance incorrects, par exemple f.button :submit, "Zrušiť"
– fonctionne parfaitement mais f.button "Zrušiť"
– jette une erreur de codage.
J’ai rencontré l’erreur lors de la migration d’une application de Ruby 1.8.7 à 1.9.3 et elle ne s’est produite qu’en production. Il s’est avéré que j’avais des rests dans ma boutique Memcache. La version sensible à l’encodage Ruby 1.9.3 de mon application a essayé de mélanger les anciennes valeurs ASCII-8BIT avec le nouveau UTF-8.
C’était aussi simple que de vider le cache pour le réparer pour moi.
Pour éviter une erreur “ne peut pas modifier la chaîne gelée” pour encoder une variable, vous pouvez utiliser: var.dup.force_encoding(Encoding::ASCII_8BIT)
ou var.dup.force_encoding(Encoding::UTF_8)
J’ai eu un problème similaire sur un fichier CoffeeScript personnalisé. Je l’ai résolu en changeant le codage de fin de ligne “Unix / Linux” en “Mac OS Classic”
La création de documents pdf avec les rails-latex-gem
pose un problème similaire. J’ai résolu ce problème en modifiant les layouts/application.pdf.erb
pour
\begin{document} <%= yield.force_encoding("UTF-8") %> \end{document}
c’est très étrange que j’ai rencontré ce problème car j’ai oublié de spécifier le paramètre ‘type’. par exemple:
add_column :cms_push_msgs, :android_title
qui devrait être:
add_column :cms_push_msgs, :android_content, :ssortingng
Juste pour l’enregistrement: pour moi, il s’est avéré que c’était le joyau appelé “mysql” … évidemment, cela fonctionne avec US-ASCII 8 bit par défaut. Donc, changer le gem appelé mysql2 (le 2 est le point important ici) a résolu tous mes problèmes.
J’ai regardé la liste de gemmes affichée ci-dessus – Michael Koper a évidemment installé mysql2 mais j’ai posté ceci au cas où quelqu’un aurait aussi ce problème .. (il m’a fallu du temps pour comprendre).
Si vous n’aimez pas cette réponse, veuillez commenter et je la supprimerai.
PS: les umlauts allemands (ä, ö et ü) ont tout gâché avec mysql
J’ai eu le même problème lors de l’parsing des fichiers CSV sur Ruby 1.9.2 qui ont été correctement analysés sur Ruby 1.8. J’ai trouvé la réponse ici . Lors de l’ouverture du fichier CSV avec le module Ruby CSV, il est nécessaire de spécifier l’encodage UTF-8 comme suit:
CSV.foreach("file.txt", encoding: "UTF-8") do |row| # foo and bar correctly encoded foo, bar, ... = row end
J’ai eu un problème similaire et le gem ssortingng-scrub l’a corrigé automatiquement. https://github.com/hsbt/ssortingng-scrub Si la chaîne donnée contient une séquence d’octets non valide, cette séquence d’octets invalide est remplacée par le caractère de remplacement unicode ( ) et une nouvelle chaîne est renvoyée.
J’ai reçu le même message d’erreur crypté de Rails 4.1, Ruby 2.3.3 dans un projet récent, stacktrace provenant de layout application.html.haml
Après une chasse à l’oie sauvage, le coupable était un personnage UTF-8 qui avait récemment été ajouté au bas de page de toutes les pages. Pour une raison étrange, l’erreur ne se manifesterait que par intermittence.
Remplacer le caractère UTF-8 par la séquence d’échappement HTML correspondante HHHH;
résolu le problème.
J’espère que cela fera gagner du temps aux autres.