it-swarm.com.ru

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

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

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

14
Vladimir Gurovich

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

  • Убедитесь, что 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

62
Ritesh Kumar

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

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

44
mfq

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

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

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

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

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

11
the Tin Man

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

gem install mysql2

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

6
StandDuPp

вы можете форсировать UTF8 с помощью force_encoding(Encoding::UTF_8):

Пример:

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

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

-# coding: UTF-8

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

5
umitka

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

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

4
Yllow

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

2
DarkAiR

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

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

2
carp

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

2
remo

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

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

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

П.С .: Немецкие умлауты (ä, ö и ü) облажались с помощью mysql

0
Langusten Gustel

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

add_column :cms_Push_msgs, :Android_title

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

add_column :cms_Push_msgs, :Android_content, :string 
0
Siwei Shen 申思维

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

0
dabobert

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

0
Sidhannowe

У меня была такая же проблема при разборе файлов 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
0
Eduardo

Я получил такое же загадочное сообщение об ошибке из Rails 4.1, Ruby 2.3.3 в недавнем проекте, трассировка стека возникла в макете application.html.haml

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

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

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

0
Tilo

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

\begin{document}

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


\end{document}
0
hartmut