Ich benutze Ruby 1.9.2 und Rails 3.0.5
Ich habe folgenden Fehler:
Inkompatible Zeichenkodierungen: 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 div haml-Aufruf):
#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)
ruby-on-rails
ruby
ruby-on-rails-3
haml
Michael Koper
quelle
quelle
Antworten:
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-freundlichen Editor arbeiten.
Überprüfen Sie, ob Sie diese Datei in einem UTF-8-freundlichen Editor von Grund auf neu erstellen können. Es gibt genug für jede Plattform und sehen Sie, ob dies Ihr Problem behebt. Beginnen Sie, indem Sie die Zeile mit
#content
löschen und manuell erneut eingeben.quelle
Ich habe es folgendermaßen gelöst:
config.encoding = "utf-8"
es sich in der Datei application.rb befindet.# encoding: utf-8
den Anfang der Datei mit UTF-8-Zeichen ein.Fügen Sie über der
<App Name>::Application.initialize!
Zeile in der Datei environment.rb die folgenden zwei Zeilen hinzu:http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html
quelle
mysql2
hat bei mir gut funktioniert, danke! - Ändern Sie den Adapter indatabase.yml
an ,mysql2
wie gut!Encoding.default_external = Encoding::UTF_8
dies nicht für Ruby-Dateien im/lib
Ordner gilt. Das Hinzufügen# encoding: utf-8
zu jeder Datei dort hat den Trick für mich getan!Versuchen Sie, die genaue Zeile zu finden, die dieses Problem verursacht, und erzwingen Sie dann die UTF8-Codierung. Diese Lösung hat bei mir funktioniert.
quelle
puts "debug URL is #{request.fullpath}"
in einer Steuerung wurde der Fehler durch Ändern in request.fullpath.inspect behoben.ASCII-8BIT ist Rubys Beschreibung für Zeichen, die über dem normalen 0-0x7f-ASCII-Zeichensatz liegen und Einzelbytezeichen sind. Normalerweise ist 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, zwischen dem Zeichensatz dieses Zeichens und UTF-8 zu konvertieren.
James Gray schrieb eine Reihe von Blogs über diese Art von Problemen und wie man damit umgeht. Ich würde empfehlen, sie durchzugehen.
Dies geschieht normalerweise, weil Sie versuchen, zwei Zeichenfolgen zu verketten, und eine Zeichen enthält, die nicht dem Zeichensatz der anderen Zeichenfolge zugeordnet sind. Es gibt Zeichen in ISO-8859-1, die in UTF-8 keine Entsprechungen haben, und umgekehrt. Um mit dem Verbinden von Zeichenfolgen mit diesen Inkompatibilitäten umzugehen, muss der Programmierer eingreifen.
quelle
Sie können UTF8 erzwingen mit
force_encoding(Encoding::UTF_8)
:Beispiel:
<%= yield.force_encoding(Encoding::UTF_8) %>
quelle
Für Haml einen Kodierungshinweis einfügen:
-# coding: UTF-8
oben links auf der Haml-Seite.
quelle
Ich habe das Gem-Paket mysql2 installiert.
und dann habe ich den Adapter in mysql2 in database.yml geändert.
quelle
Das Problem war die Verwendung falscher Anführungszeichen in der iOS-Version. Stellen Sie sicher, dass alle Ihre Anführungszeichen "und nicht" oder "sind.
https://github.com/CocoaPods/CocoaPods/issues/829
quelle
Um zu verhindern, dass ein Fehler "Gefrorene Zeichenfolge kann nicht geändert werden" zum Codieren einer Variablen verwendet wird, können Sie Folgendes verwenden:
var.dup.force_encoding(Encoding::ASCII_8BIT)
odervar.dup.force_encoding(Encoding::UTF_8)
quelle
Ich habe ein ähnliches Problem erlebt. Obwohl ich UTF-8-Codierungen gelöst hatte (mit mysql2 und Encoding.default_external = Encoding :: UTF_8 ...), entstanden inkompatible Zeichencodierungen: UTF-8 und ASCII-8BIT entstanden, wenn ich falsche Hilfsparameter verwendete, z. B.
f.button :submit, "Zrušiť"
- funktioniert perfekt, aberf.button "Zrušiť"
- wirft Codierungsfehler.quelle
Beim Migrieren einer App von Ruby 1.8.7 auf 1.9.3 ist der Fehler aufgetreten, der nur in der Produktion aufgetreten ist. Es stellte sich heraus, dass ich einige Reste in meinem Memcache-Laden hatte. Die jetzt codierende Ruby 1.9.3-Version meiner App hat versucht, alte ASCII-8BIT-Werte mit neuem UTF-8 zu mischen.
Es war so einfach wie das Leeren des Caches, um es für mich zu reparieren.
quelle
Ich hatte ein ähnliches Problem mit einer benutzerdefinierten CoffeeScript-Datei. Ich habe es gelöst, indem ich die Endline-Codierung von "Unix / Linux" auf "Mac OS Classic" geändert habe.
quelle
Die Erstellung von PDF-Dokumenten
rails-latex-gem
führt zu einem ähnlichen Problem. Ich habe dies durch Modifizierenlayouts/application.pdf.erb
auf gelöst\begin{document} <%= yield.force_encoding("UTF-8") %> \end{document}
quelle
Es ist sehr seltsam, dass ich auf dieses Problem gestoßen bin, weil ich vergessen habe, den Parameter 'type' anzugeben. z.B:
add_column :cms_push_msgs, :android_title
welches sein sollte:
add_column :cms_push_msgs, :android_content, :string
quelle
Nur zur Veranschaulichung: Für mich stellte sich heraus, dass es sich um das Juwel 'mysql' handelte ... offensichtlich funktioniert dies standardmäßig mit US-ASCII 8 Bit . Das Ändern in den Edelstein mysql2 (die 2 ist hier der wichtige Punkt) löste alle meine Probleme.
Ich habe in der oben angegebenen Edelsteinliste nachgesehen - Michael Koper hat offensichtlich mysql2 installiert, aber ich habe dies gepostet, falls auch jemand dieses Problem hat. (Ich habe einige Zeit gebraucht, um es herauszufinden).
Wenn Ihnen diese Antwort nicht gefällt, kommentieren Sie sie bitte und ich werde sie löschen.
PS: Deutsche Umlaute (ä, ö und ü) haben es mit MySQL herausgeschraubt
quelle
Ich hatte das gleiche Problem beim Parsen von CSV-Dateien unter Ruby 1.9.2, die unter Ruby 1.8 korrekt 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 wie folgt angeben:
CSV.foreach("file.txt", encoding: "UTF-8") do |row| # foo and bar correctly encoded foo, bar, ... = row end
quelle
Ich hatte ein ähnliches Problem und das Edelstein-String-Scrub hat es automatisch für mich behoben. https://github.com/hsbt/string-scrub Wenn die angegebene Zeichenfolge eine ungültige Bytesequenz enthält, wird diese ungültige Bytesequenz durch das Unicode-Ersetzungszeichen ( ) ersetzt und eine neue Zeichenfolge zurückgegeben.
quelle
Ich habe die gleiche kryptische Fehlermeldung von Rails 4.1, Ruby 2.3.3 in einem kürzlich durchgeführten Projekt erhalten. Stacktrace stammt aus dem Layout application.html.haml
Nach einer wilden Gänsejagd war der Täter ein UTF-8-Charakter, der kürzlich in die Fußzeile aller Seiten aufgenommen wurde. Aus irgendeinem seltsamen Grund würde der Fehler nur zeitweise auftreten.
Das Ersetzen des UTF-8-Zeichens durch die entsprechende HTML-Escape-Sequenz
&#xHHHH;
löste das Problem.Ich hoffe, das spart anderen Menschen in Zukunft etwas Zeit.
quelle