несовместимые кодировки символов: ASCII-8BIT и UTF-8
Я использую Ruby 1.9.2 и Rails 3.0.5
у меня есть следующие ошибки:
несовместимые кодировки символов: ASCII-8BIT и UTF-8
Это не имеет ничего общего с базой данных, я думаю.
ошибка происходит на этой линии в представлении (просто вызов div haml):
#content
полный стек:
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'
мои камни:
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)
18 ответов:
У меня есть подозрение, что вы либо копируете/вставляете часть своего шаблона Haml в файл, либо работаете с дружественным редактором, отличным от Unicode/non-UTF-8.
смотрите, если вы можете воссоздать этот файл с нуля в UTF-8 удобный редактор. Есть много для любой платформы и посмотреть, исправляет ли это вашу проблему. Начните с удаления строки с помощью
#content
и введя его вручную.
Я решил ее следующим образом:
- убедится
config.encoding = "utf-8"
в приложения.rb файл.- убедитесь, что вы используете камень 'mysql2'.
- поставить
# encoding: utf-8
в верхней части файла, содержащего символы UTF-8.выше
<App Name>::Application.initialize!
линии в окружающей среде.rb-файл, добавьте следующие два строки:Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8
http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html
попробуйте найти точную строку, которая вызывает эту проблему, а затем применить кодирование UTF8, это решение сработало для меня.
название.to_s.force_encoding("УТФ-8")
ASCII-8BIT-это описание Ruby для символов выше обычного набора символов 0-0x7f ASCII, и это однобайтовые символы. Как правило, это будет что-то вроде ISO-8859-1 или одного из его братьев и сестер.
Если вы можете определить, какой символ вызывает проблему, то вы можете сказать Ruby 1.9.2 для преобразования между набором символов этого символа в UTF-8.
Джеймс Грей написал
Я установил пакет gem mysql2.
gem install mysql2
а затем я изменил адаптер в mysql2 в базе данных.в формате YML.
вы можете заставить UTF8 с
force_encoding(Encoding::UTF_8)
:пример:
<%= yield.force_encoding(Encoding::UTF_8) %>
проблема заключалась в использовании неверных кавычек вокруг версии iOS. Убедитесь, что все ваши цитаты "и не "или".
Я испытал подобную проблему. Хотя у меня были кодировки UTF-8 (с mysql2 и кодировкой.default_external = Encoding:: UTF_8 ...)несовместимые кодировки символов: UTF-8 и ASCII-8BIT возник, когда я использовал неправильные вспомогательные параметры, например
f.button :submit, "Zrušiť"
- работает отлично, ноf.button "Zrušiť"
- выдает ошибку кодировки.
Я столкнулся с ошибкой при переносе приложения из Ruby 1.8.7 в 1.9.3, и это произошло только в производстве. Оказалось, что у меня остались кое-какие остатки в моем магазине Memcache. Теперь кодирование чувствительной версии Ruby 1.9.3 моего приложения попыталось смешать старые значения ASCII-8BIT с новыми UTF-8.
Это было так же просто, как очистить кэш, чтобы исправить это для меня.
для предотвращения ошибки "не удается изменить замороженную строку" для кодирования переменной можно использовать:
var.dup.force_encoding(Encoding::ASCII_8BIT)
илиvar.dup.force_encoding(Encoding::UTF_8)
У меня была аналогичная проблема с пользовательским файлом CoffeeScript. Я решил это, изменив кодировку конечной строки с "Unix / Linux"на" Mac OS Classic"
создание pdf-документов с помощью
rails-latex-gem
приведет к аналогичной проблеме. Я решил это путем измененияlayouts/application.pdf.erb
до\begin{document} <%= yield.force_encoding("UTF-8") %> \end{document}
это очень странно, что я встретил эту проблему, потому что я забыл указать параметр 'type'. например:
add_column :cms_push_msgs, :android_title
что надо:
add_column :cms_push_msgs, :android_content, :string
просто для протокола: для меня оказалось, что это был самоцвет под названием 'mysql' ... очевидно, что это работает с US-ASCII 8 бит по умолчанию. Так что меняем его на драгоценный камень под названием mysql2 (2-это важный момент здесь) решил все мои проблемы.
Я посмотрел @ список драгоценных камней, опубликованный выше-Майкл Копер, очевидно, mysql2 установлен, но я разместил это в случае, если у кого-то есть эта проблема .. (мне потребовалось некоторое время, чтобы понять из.)
Если вам не нравится этот ответ, пожалуйста, прокомментируйте, и я удалю его.
P. S: немецкие умлауты (ä,ö и ü) выкрутили его с mysql
У меня была та же проблема при разборе CSV-файлов на Ruby 1.9.2, которые были правильно проанализированы на Ruby 1.8. Я нашел ответ здесь. При открытии CSV файла с модулем Ruby CSV необходимо указать UTF-8 enconding следующим образом:
CSV.foreach("file.txt", encoding: "UTF-8") do |row| # foo and bar correctly encoded foo, bar, ... = row end
У меня была аналогичная проблема, и GEM string-scrub автоматически исправил ее для меня. https://github.com/hsbt/string-scrub Если данная строка содержит недопустимую последовательность байтов, то эта недопустимая последовательность байтов заменяется символом замены unicode ( � ) и возвращается новая строка.
Я получил то же самое загадочное сообщение об ошибке от Rails 4.1, Ruby 2.3.3 в недавнем проекте, stacktrace, исходящем из приложения макета.формат html.Haml на
после погони за диким гусем виновником был символ UTF-8, который недавно был добавлен в нижний колонтитул всех страниц. По какой-то странной причине ошибка будет появляться только периодически.
замена символа UTF-8 на соответствующий HTML escape sequence
&#xHHHH;
решается вопрос.Я надеюсь это экономит другим людям некоторое время в будущем..