web-dev-qa-db-fra.com

codages de caractères incompatibles: ASCII-8BIT et UTF-8

J'utilise Ruby 1.9.2 et Rails 3.0.5

J'ai l'erreur suivante:

codages de caractères incompatibles: ASCII-8BIT et UTF-8

Cela n'a rien à voir avec la base de données, 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_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'

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 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) 
67
Michael Koper

Je soupçonne que vous avez copié/collé une partie de votre modèle Haml dans le fichier ou que vous utilisez un éditeur non compatible Unicode/non UTF-8.

Voyez si vous pouvez recréer ce fichier à partir de rien dans un éditeur convivial UTF-8. Il y en a beaucoup pour toutes les plateformes et voyez si cela résout votre problème. Commencez par effacer la ligne avec #content et retapez-la manuellement.

14
Vladimir Gurovich

Je l'ai résolu en suivant ces étapes:

  • Assurez-vous que config.encoding = "utf-8" se trouve dans le fichier application.rb.
  • Assurez-vous que vous utilisez la gem 'mysql2'.
  • Placez # encoding: utf-8 en haut du fichier contenant les caractères UTF-8.
  • Au-dessus de la ligne <App Name>::Application.initialize! 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

62
Ritesh Kumar

Essayez de trouver la ligne exacte qui cause ce problème, puis appliquez le codage UTF8, cette solution a fonctionné pour moi. 

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

44
mfq

ASCII-8BIT est la description de Ruby pour les caractères supérieurs au jeu de caractères normal 0-0x7f ASCII, et qui sont des caractères à un octet. En règle générale, cela ressemblerait à 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 parlant de ce type de problèmes et de la façon de les résoudre. Je recommanderais de passer par eux.

codages de caractères incompatibles: ASCII-8BIT et UTF-8

Cela se produit généralement lorsque vous essayez de concaténer deux chaînes, dont l'une contient des caractères qui ne correspondent pas au jeu de caractères de l'autre chaîne. Certains caractères dans ISO-8859-1 n'ont pas d'équivalent dans UTF-8, et inversement, et la gestion des jonctions de chaînes avec ces incompatibilités nécessite l'intervention du programmeur.

11
the Tin Man

J'ai installé le paquet gem mysql2.

gem install mysql2

et puis j'ai changé l'adaptateur dans mysql2 dans database.yml.

6
StandDuPp

vous pouvez forcer UTF8 avec force_encoding(Encoding::UTF_8):

Exemple:

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

Pour Haml, mettez un indice de codage:

-# coding: UTF-8

en haut à gauche de la page Haml.

5
umitka

Le problème était l'utilisation de guillemets incorrects autour de la version iOS. Assurez-vous que toutes vos citations sont "et non" ou ".

https://github.com/CocoaPods/CocoaPods/issues/829

4
Yllow

Pour éviter une erreur "ne peut pas modifier la chaîne figée" lors du codage d'une variable, vous pouvez utiliser: var.dup.force_encoding(Encoding::ASCII_8BIT) ou var.dup.force_encoding(Encoding::UTF_8)

2
DarkAiR

J'ai rencontré l'erreur lors de la migration d'une application de Ruby 1.8.7 à 1.9.3 et cela ne s'est produit qu'en production. Il s'est avéré que j'avais des restes dans mon magasin Memcache. La version Ruby 1.9.3 maintenant sensible au codage de mon application a tenté de mélanger les anciennes valeurs ASCII-8BIT avec le nouvel UTF-8.

C'était aussi simple que de vider la mémoire cache pour la réparer.

2
carp

J'ai eu le même problème. Bien que les 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 paramètres d'assistance incorrects, par exemple. f.button :submit, "Zrušiť" - fonctionne parfaitement mais f.button "Zrušiť"- génère une erreur d'encodage.

2
remo

Pour mémoire, il s’est avéré que c’était la gemme appelée 'mysql' ... il est évident que cela fonctionne avec US-ASCII 8 bits par défaut. Donc changer en une gemme appelée mysql2 (le 2 est le point important ici) a résolu tous mes problèmes.

J'ai jeté un œil à la liste de gemmes affichée ci-dessus - Michael Koper a bien évidemment installé mysql2 mais je l'ai posté au cas où quelqu'un aurait également ce problème ..

Si vous n'aimez pas cette réponse, veuillez commenter et je vais la supprimer.

P.S: Les umlauts allemands (ä, ö et ü) ont tout gâché avec mysql

0
Langusten Gustel

c'est très étrange d'avoir 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, :string 
0

j'ai eu un problème similaire et le gem string-scrub l'a corrigé automatiquement pour moi. https://github.com/hsbt/string-scrub Si la chaîne donnée contient une séquence d'octets non valide, cette séquence d'octets non valide est remplacée par le caractère de remplacement unicode () et une nouvelle chaîne est renvoyée.

0
dabobert

J'ai eu un problème similaire sur un fichier CoffeeScript personnalisé. Je l'ai résolu en remplaçant le codage "Unix/Linux" par "Mac OS Classic"

0
Sidhannowe

J'ai eu le même problème lors de l'analyse de 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 le format UTF-8 comme suit:

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

J'ai reçu le même message d'erreur cryptique 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 pied de page de toutes les pages. Pour une raison étrange, l'erreur n'apparaîtrait que par intermittence.

Le remplacement du caractère UTF-8 par la séquence d'échappement HTML correspondante &#xHHHH; a résolu le problème.

J'espère que cela sauvera d'autres personnes un peu plus tard.

0
Tilo

La création de documents pdf avec le Rails-latex-gem a conduit à un problème similaire ..__ Je l'ai résolu en modifiant layouts/application.pdf.erb en

\begin{document}

<%= yield.force_encoding("UTF-8") %>


\end{document}
0
hartmut