encodages 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:

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

ça 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 de div haml):

#content

full stack:

    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) 
65
demandé sur the Tin Man 2011-03-13 01:55:50

18 réponses

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 ya beaucoup de la plate-forme et voir si cela résout votre problème. Commencez par effacer la ligne avec #content et de le retaper manuellement.

14
répondu Vladimir Gurovich 2013-06-07 17:17:04

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

  • assurez-vous que config.encoding = "utf-8" figure dans la demande.dossier rb.
  • assurez-vous que vous utilisez le 'mysql2' gem.
  • Mettre # encoding: utf-8 en haut de fichier contenant des caractères UTF-8.
  • au-dessus de la ligne <App Name>::Application.initialize! dans l'environnement.fichier rb, ajouter 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

61
répondu Ritesh Kumar 2013-06-07 17:21:31

essayer de trouver la ligne exacte qui cause ce problème et puis appliquer UTF8 codage, cette solution a fonctionné pour moi.

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

43
répondu mfq 2012-02-14 14:36:03

ASCII-8BIT est la description de Ruby pour les caractères au-dessus de la normale 0-0x7f ASCII jeu de caractères, 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 quel caractère est à l'origine du problème, alors vous pouvez dire à Ruby 1.9.2 de convertir le jeu de caractères de ce caractère en UTF-8.

James Grey a écrit une série de blogs talking à propos de ce genre de problèmes et de la façon de les traiter. Je vous conseille d'aller à travers eux.

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

cela se produit typiquement parce que vous essayez de concaténer deux chaînes, et 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 la norme ISO-8859-1 qui n'ont pas d'équivalents en UTF-8, et vice-versa et comment gérer la chaîne se joignant à ceux des incompatibilités le programmeur.

11
répondu the Tin Man 2014-12-05 15:35:04

j'ai installé le paquet gem mysql2.

gem install mysql2

et puis j'ai changé l'adaptateur dans mysql2 dans la base de données.yml.

6
répondu StandDuPp 2013-06-13 12:49:30

pour Haml mettre un indice d'encodage:

-# coding: UTF-8

en haut à gauche de la page Haml.

5
répondu umitka 2013-06-07 17:18:25

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

exemple:

<%= yield.force_encoding(Encoding::UTF_8) %>
5
répondu Daniel Loureiro 2015-04-20 01:19:26

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

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

4
répondu Yllow 2014-02-18 05:42:18

j'ai connu le même problème. Bien que J'ai eu des encodages UTF-8 résolus (avec mysql2 et encodage.default_external = Encodage::UTF_8 ...) incompatible codages de caractères: UTF-8 et de l'ASCII 8 BITS est née lorsque j'ai utilisé incorrect helper paramètres par exemple f.button :submit, "Zrušiť" - fonctionne parfaitement mais f.button "Zrušiť" - jette erreur de codage.

2
répondu remo 2012-01-25 22:36:12

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 à l'encodage de mon application a essayé de mélanger les anciennes valeurs ASCII-8BIT avec les nouvelles valeurs UTF-8.

c'était aussi simple que de vider le cache pour le réparer pour moi.

2
répondu carp 2013-10-09 14:08:59

Pour éviter une erreur "impossible de modifier congelés chaîne" pour l'encodage d'une varible vous pouvez utiliser: var.dup.force_encoding(Encoding::ASCII_8BIT) ou var.dup.force_encoding(Encoding::UTF_8)

1
répondu DarkAiR 2017-04-19 06:31:23

j'ai eu un problème similaire sur un fichier CoffeeScript personnalisé. Je l'ai résolu en changeant l'encodage de fin de ligne "Unix / Linux" en "Mac OS Classic "

0
répondu Sidhannowe 2012-09-10 15:37:32

La création de pdf-documents avec le rails-latex-gem conduire à un problème similaire. J'ai résolu cela en modifiant layouts/application.pdf.erb en

\begin{document}

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


\end{document}
0
répondu hartmut 2013-02-16 15:34:35

c'est très étrange que j'ai rencontré ce problème parce que 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
répondu Siwei Shen申思维 2013-05-28 09:55:31

juste pour mémoire: pour moi il s'est avéré que c'était la pierre précieuse appelée 'mysql' ... de toute évidence, cela fonctionne avec US-ASCII 8 bits par défaut. Donc le changer pour 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 posté ci - dessus-Michael Koper a évidemment mysql2 installé, mais j'ai posté ceci au cas où quelqu'un a ce problème comme bien. . (m'a fallu un certain temps pour comprendre).

si vous n'aimez pas cette réponse, veuillez la commenter et je la supprimerai.

P. S: les accents (ä,ö et ü) vissé avec mysql

0
répondu Langusten Gustel 2013-09-26 23:25:22

j'ai eu le même problème en analysant les 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
0
répondu Eduardo 2017-05-23 12:02:14

j'ai eu un problème similaire et le Gem string-scrub automatiquement corrigé pour moi. https://github.com/hsbt/string-scrub si la chaîne de caractères contient une séquence d'octets invalide, cette séquence d'octets invalide est remplacée par le caractère de remplacement unicode (փ) et une nouvelle chaîne de caractères est retournée.

0
répondu dabobert 2014-07-14 18:09:33

j'ai reçu le même message d'erreur cryptique de la part de Rails 4.1, Ruby 2.3.3 dans un projet récent, stacktrace originaire de layout application.HTML.haml

après une chasse à l'oie sauvage, le coupable était un caractère UTF-8 qui avait récemment été ajouté au pied de toutes les pages. Pour une raison étrange, l'erreur n'apparaîtrait que de façon intermittente.

remplaçant le caractère UTF-8 par la séquence D'échappement HTML correspondante &#xHHHH; résolu le question.

j'espère que cela permet d'économiser d'autres personnes dans le futur..

0
répondu Tilo 2017-02-21 05:18:37