wake-up-neo.com

inkompatible Zeichencodierungen: ASCII-8BIT und UTF-8

Ich verwende Ruby 1.9.2 und Rails 3.0.5

Ich habe den folgenden Fehler:

inkompatible Zeichencodierungen: ASCII-8BIT und UTF-8

Es hat nichts mit der Datenbank zu tun, denke ich.

Der Fehler tritt in dieser Zeile in einer Ansicht auf (nur ein Aufruf von div haml):

#content

voller Stapel:

    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'

Meine Edelsteine:

        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

Ich habe den Verdacht, dass Sie entweder einen Teil Ihrer Haml-Vorlage in die Datei kopiert/eingefügt haben oder mit einem nicht Unicode/Nicht-UTF-8-fähigen Editor arbeiten.

Prüfen Sie, ob Sie diese Datei in einem UTF-8-freundlichen Editor von Grund auf neu erstellen können. Es gibt viele für jede Plattform und sehen, ob dies Ihr Problem behebt. Löschen Sie zunächst die Zeile mit #content und geben Sie sie erneut manuell ein.

14

Ich habe es durch folgende Schritte gelöst:

  • Stellen Sie sicher, dass sich config.encoding = "utf-8" in der Datei application.rb befindet.
  • Stellen Sie sicher, dass Sie den 'mysql2' gem verwenden.
  • Setzen Sie # encoding: utf-8 oben in eine Datei, die UTF-8-Zeichen enthält.
  • Fügen Sie über der <App Name>::Application.initialize!-Zeile in der Datei environment.rb die folgenden beiden Zeilen ein:

    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

Versuchen Sie die genaue Zeile zu finden, die dieses Problem verursacht, und erzwingen Sie dann die UTF8-Codierung. 

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

44
mfq

ASCII-8BIT ist die Beschreibung von Ruby für Zeichen, die über dem normalen 0-0x7f ASCII - Zeichensatz liegen und Einzelbyte-Zeichen sind. Normalerweise wäre das so etwas wie ISO-8859-1 oder eines seiner Geschwister. 

Wenn Sie feststellen können, welches Zeichen das Problem verursacht, können Sie Ruby 1.9.2 anweisen, den Zeichensatz dieses Zeichens in UTF-8 zu konvertieren.

James Gray schrieb eine Reihe von Blogs , in denen er über diese Art von Problemen und über den Umgang mit ihnen sprach. Ich würde empfehlen, sie durchzugehen.

inkompatible Zeichencodierungen: ASCII-8BIT und UTF-8

Dies geschieht normalerweise, weil Sie versuchen, zwei Zeichenfolgen zu verketten, und eine Zeichenfolge enthält Zeichen, die nicht dem Zeichensatz der anderen Zeichenfolge zugeordnet sind. Es gibt Zeichen in ISO-8859-1, die keine Entsprechung in UTF-8 haben, und umgekehrt, und wie der String-Join mit diesen Inkompatibilitäten behandelt werden muss, muss der Programmierer eingreifen.

11
the Tin Man

Ich habe das gem-Paket mysql2 installiert.

gem install mysql2

und dann habe ich den Adapter in mysql2 in database.yml geändert.

6
StandDuPp

sie können UTF8 mit force_encoding(Encoding::UTF_8) erzwingen:

Beispiel:

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

Für Haml einen Kodierungshinweis:

-# coding: UTF-8

oben links auf der Haml-Seite.

5
umitka

Das Problem war die Verwendung falscher Anführungszeichen um die iOS-Version. Stellen Sie sicher, dass alle Ihre Angebote 'und nicht' oder 'sind.

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

4
Yllow

Um einen Fehler zu verhindern, "kann keine eingefrorene Zeichenfolge ändern", um eine Variable zu codieren, können Sie Folgendes verwenden: var.dup.force_encoding(Encoding::ASCII_8BIT) oder var.dup.force_encoding(Encoding::UTF_8)

2
DarkAiR

Beim Migrieren einer App von Ruby 1.8.7 auf 1.9.3 ist der Fehler aufgetreten, und dieser Fehler trat nur in der Produktion auf. Es stellte sich heraus, dass ich einige Reste in meinem Memcache-Laden hatte. Die jetzt codierungsempfindliche Ruby 1.9.3-Version meiner App hat versucht, alte ASCII-8BIT-Werte mit dem neuen UTF-8 zu mischen.

Es war so einfach, den Cache zu leeren, um ihn für mich zu reparieren.

2
carp

Ich habe ein ähnliches Problem erlebt. Obwohl ich UTF-8-Codierungen gelöst hatte (mit mysql2 und Encoding.default_external = Encoding :: UTF_8 ...) inkompatible Zeichencodierungen: UTF-8 und ASCII-8BIT entstanden, als ich falsche Helper-Parameter verwendete, z. f.button :submit, "Zrušiť" - funktioniert einwandfrei, aber f.button "Zrušiť"- wirft einen Codierungsfehler aus.

2
remo

Nur fürs Protokoll: Für mich stellte sich heraus, dass es der Edelstein 'mysql' war ... offensichtlich funktioniert dies mit US-ASCII 8 Bit standardmäßig. Wenn man es in das Juwel namens mysql2 umwandelt (die 2 ist hier der wichtige Punkt), wurden alle meine Probleme gelöst.

Ich habe @ die Edelsteinliste angeschaut - Michael Koper hat offensichtlich mysql2 installiert, aber ich habe dies für den Fall gepostet, dass auch jemand dieses Problem hat.

Wenn Sie diese Antwort nicht mögen, kommentieren Sie sie bitte und ich werde sie löschen.

PS: Deutsche Umlaute (ä, ö und ü) haben es mit mysql herausgeschraubt

0

es ist sehr seltsam, dass ich dieses Problem getroffen habe, weil ich vergessen habe, den Parameter 'type' anzugeben. z.B.: 

add_column :cms_Push_msgs, :Android_title

was sollte sein:

add_column :cms_Push_msgs, :Android_content, :string 

ich hatte ein ähnliches Problem und das Gem-String-Scrub hat es automatisch für mich behoben. https://github.com/hsbt/string-scrub Wenn die angegebene Zeichenfolge eine ungültige Bytefolge enthält, wird diese ungültige Bytefolge durch das Unicode-Ersetzungszeichen ( ) ersetzt und eine neue Zeichenfolge zurückgegeben.

0
dabobert

Ich hatte ein ähnliches Problem in einer benutzerdefinierten CoffeeScript-Datei. Ich habe es gelöst, indem ich die Endline-Kodierung von "Unix/Linux" in "Mac OS Classic" geändert habe.

0
Sidhannowe

Ich hatte das gleiche Problem beim Parsen von CSV-Dateien in Ruby 1.9.2, die in Ruby 1.8 richtig analysiert wurden. Ich habe die Antwort hier gefunden. Wenn Sie die CSV-Datei mit dem Ruby CSV-Modul öffnen, müssen Sie die UTF-8-Codierung folgendermaßen angeben:

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

Ich habe die gleiche kryptische Fehlermeldung von Rails 4.1, Ruby 2.3.3 in einem aktuellen Projekt erhalten, Stacktrace mit Ursprung in Layout application.html.haml

Nach einer wilden Gänsejagd war der Schuldige ein UTF-8-Charakter, der kürzlich in die Fußzeile aller Seiten eingefügt wurde. Aus irgendeinem seltsamen Grund wurde der Fehler nur zeitweise angezeigt.

Durch Ersetzen des UTF-8-Zeichens durch die entsprechende HTML-Escape-Sequenz &#xHHHH; wurde das Problem behoben.

Ich hoffe, das spart anderen Menschen in der Zukunft etwas Zeit.

0
Tilo

Die Erstellung von PDF-Dokumenten mit dem Rails-latex-gem führte zu einem ähnlichen Problem ..__ Ich löste dieses Problem durch Ändern von layouts/application.pdf.erb in

\begin{document}

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


\end{document}
0
hartmut