Несовместимые кодировки символов: 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) 

Ответ 1

У меня есть подозрение, что вы копируете/вставляете часть вашего шаблона Haml в файл или работаете с дружественным редактором, отличным от Unicode/non-UTF-8.

Посмотрите, можете ли вы восстановить этот файл с нуля в дружественном редакторе UTF-8. Есть много возможностей для любой платформы и выясните, устраняет ли это вашу проблему. Начните с стирания линии с помощью #content и повторного ввода ее вручную.

Ответ 2

Я решил это, выполнив следующие шаги:

  • Убедитесь, что config.encoding = "utf-8" находится в файле application.rb.
  • Убедитесь, что вы используете драгоценный камень mysql2.
  • Поместите # encoding: utf-8 в начало файла, содержащего символы UTF-8.
  • Над строкой <App Name>::Application.initialize! в файле environment.rb добавьте следующие две строки:

    Encoding.default_external = Encoding::UTF_8
    Encoding.default_internal = Encoding::UTF_8
    

http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html

Ответ 3

Попробуйте найти точную строку, которая вызывает эту проблему, а затем принудительно кодирует UTF8, это решение сработало для меня.

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

Ответ 4

ASCII-8BIT - это описание Ruby для символов выше обычного символьного набора ASCII 0-0x7f и однобайтовые символы. Обычно это будет что-то вроде ISO-8859-1 или одного из его братьев и сестер.

Если вы можете определить, какой символ вызывает проблему, вы можете сообщить Ruby 1.9.2, чтобы преобразовать между символьным набором этого символа в UTF-8.

Джеймс Грей написал серию блога , рассказывая об этих проблемах и о том, как с ними бороться. Я бы рекомендовал пройти через них.

несовместимые кодировки символов: ASCII-8BIT и UTF-8

Это обычно происходит, потому что вы пытаетесь объединить две строки, а одна содержит символы, которые не сопоставляются с набором символов другой строки. В ISO-8859-1 есть символы, которые не имеют эквивалентов в UTF-8, и наоборот и как обрабатывать соединение строк с этими несовместимостями требует от программиста входа.

Ответ 5

Я установил gem-пакет mysql2.

gem install mysql2

а затем я заменил адаптер в mysql2 в database.yml.

Ответ 6

Для Haml введите подсказку:

-# coding: UTF-8

в верхнем левом углу страницы Haml.

Ответ 7

Проблема заключалась в использовании неправильных котировок в версии iOS. Убедитесь, что все ваши кавычки "а не" или.

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

Ответ 8

вы можете заставить UTF8 с force_encoding(Encoding::UTF_8):

Пример:

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

Ответ 9

У меня возникла аналогичная проблема. Хотя у меня были кодировки UTF-8 (с mysql2 и Encoding.default_external = Encoding:: UTF_8...), несовместимые кодировки символов: UTF-8 и ASCII-8BIT возникли, когда я использовал неправильные вспомогательные параметры, например. f.button :submit, "Zrušiť" - работает отлично, но f.button "Zrušiť" - генерирует ошибку кодирования.

Ответ 10

Я столкнулся с ошибкой при переносе приложения с Ruby 1.8.7 на 1.9.3, и это произошло только в процессе производства. Оказалось, что у меня остались некоторые остатки в магазине Memcache. Теперь кодирующая уязвимая версия Ruby версии 1.9.3 моего приложения пыталась смешать старые значения ASCII-8BIT с новым UTF-8.

Это было так же просто, как очистить кеш, чтобы исправить его для меня.

Ответ 11

У меня была аналогичная проблема в пользовательском файле CoffeeScript. Я решил это, изменив кодировку конечной линии с "Unix/Linux" на "Mac OS Classic"

Ответ 12

Создание pdf-документов с rails-latex-gem приводит к аналогичной проблеме. Я решил это, изменив layouts/application.pdf.erb на

\begin{document}

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


\end{document}

Ответ 13

Очень странно, что я встретил эту проблему, потому что я забыл указать параметр "type". например:

add_column :cms_push_msgs, :android_title

который должен быть:

add_column :cms_push_msgs, :android_content, :string 

Ответ 14

Только для записи: для меня выяснилось, что это был камень, называемый 'mysql'... очевидно, что он работает с US-ASCII 8 бит по умолчанию. Таким образом, изменение его на драгоценный камень, называемый mysql2 (2 здесь важный момент), решило все мои проблемы.

Я посмотрел @список драгоценных камней, вышедший выше - Майкл Копер, очевидно, был установлен mysql2, но я разместил его на случай, если у кого-то тоже будет эта проблема. (Мне понадобилось некоторое время, чтобы понять).

Если вам не нравится этот ответ, прокомментируйте, и я удалю его.

P.S: Немецкие умляуты (ä, ö и ü) ввернули его с помощью mysql

Ответ 15

У меня была та же проблема при анализе файлов CSV на Ruby 1.9.2, которые были правильно разобраны на Ruby 1.8. Я нашел ответ здесь. При открытии CSV файла с модулем Ruby CSV необходимо указать UTF-8, который будет выглядеть следующим образом:

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

Ответ 16

У меня была аналогичная проблема, и стирание жемчужины автоматически исправляло ее для меня. https://github.com/hsbt/string-scrub Если данная строка содержит недопустимую последовательность байтов, то эта неправильная последовательность байтов заменяется символом замены юникода ( ) и новой строкой возвращается.

Ответ 17

У меня появилось такое же загадочное сообщение об ошибке из Rails 4.1, Ruby 2.3.3 в недавнем проекте, stacktrace, созданный в макете application.html.haml

После дикой охоты на гусей преступник был символом UTF-8, который недавно был добавлен в нижний колонтитул всех страниц. По какой-то странной причине ошибка будет появляться с перерывами.

Замена символа UTF-8 на соответствующую escape-последовательность HTML &#xHHHH; решена проблема.

Я надеюсь, что это спасет других людей в будущем.

Ответ 18

Для предотвращения ошибки "невозможно изменить замороженную строку" для кодирования переменной можно использовать: var.dup.force_encoding(Encoding::ASCII_8BIT) или var.dup.force_encoding(Encoding::UTF_8)