不兼容的字符编码:ASCII-8BIT和UTF-8

我使用Ruby 1.9.2和Rails 3.0.5

我有以下错误:

不兼容的字符编码:ASCII-8BIT和UTF-8

这与我认为的数据库无关。

错误是在这条线在一个视图happinging(只是一个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' 

我的gem:

  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) 

我怀疑你要么将Haml模板的一部分复制/粘贴到文件中,要么使用非Unicode /非UTF-8友好的编辑器。

看看你是否可以在UTF-8友好的编辑器中重新创build该文件。 有很多的平台,看看这是否解决了你的问题。 首先用#content擦除行并手动重新input。

我通过以下步骤解决了它:

  • 确保config.encoding = "utf-8"位于application.rb文件中。
  • 确保你使用的是'mysql2'gem。
  • # 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

试着find导致这个问题的确切的线,然后强制UTF8编码,这个解决scheme为我工作。

title.to_s.force_encoding( “UTF-8”)

ASCII-8BIT是Ruby对正常0-0x7f ASCII字符集之上的字符的描述,并且是单字节字符。 通常情况下,这将是像ISO-8859-1,或其兄弟之一。

如果您可以识别哪个字符导致问题,那么您可以告诉Ruby 1.9.2将该字符的字符集转换为UTF-8。

詹姆斯·格雷(James Gray)写了一系列关于这些问题的博客 ,以及如何处理这些问题。 我build议通过他们。

不兼容的字符编码:ASCII-8BIT和UTF-8

通常会发生这种情况,因为您试图连接两个string,而其中一个包含不映射到另一个string的字符集的字符。 ISO-8859-1中有一些字符在UTF-8中没有相应的字符,反之亦然,如何处理string与那些不兼容的连接需要程序员介入。

我安装了gem包mysql2。

 gem install mysql2 

然后我在database.yml中的mysql2中更改了适配器。

对于Haml提出一个编码提示:

 -# coding: UTF-8 

在Haml页面的左上angular。

问题是在iOS版本中使用了不正确的引号。 确保你所有的报价是'而不是'或'。

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

你可以用force_encoding(Encoding::UTF_8)强制UTF8:

例:

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

我遇到过类似的问题。 虽然我已经解决了UTF-8编码(使用mysql2和Encoding.default_external = Encoding :: UTF_8 …) 不兼容的字符编码:当我使用不正确的帮助参数例如f.button :submit, "Zrušiť"出现UTF-8和ASCII-8BIT f.button :submit, "Zrušiť" – 完美的作品,但f.button "Zrušiť" – 抛出编码错误。

我从Ruby 1.8.7迁移到1.9.3时遇到了错误,而且只在生产中发生。 事实certificate,我在我的Memcache商店有一些剩菜。 现在编码敏感的Ruby 1.9.3版本的我的应用程序试图混合旧的ASCII-8BIT值与新的UTF-8。

这就像冲洗caching来为我修复它一样简单。

我有一个类似的问题在一个自定义的CoffeeScript文件。 我通过将“Unix / Linux”的terminal编码更改为“Mac OS Classic”

使用rails-latex-gem创buildpdf文档会导致类似的问题。 我通过修改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 

只是为了logging:对我来说,事实certificate,这是名为“MySQL”的gem…显然,这是默认与US-ASCII 8位工作。 所以把它改成叫做mysql2的gem(这里2是重点)解决了我所有的问题。

我看了@上面列出的gem列表 – 迈克尔·科佩尔明显安装了mysql2,但我张贴这个以防有人有这个问题,以及..(花了我一些时间弄清楚)。

如果你不喜欢这个答案,请评论,我会删除它。

PS:德语变音(ä,ö和ü)用mysql搞砸了

parsingRuby 1.9上正确parsing的Ruby 1.9.2上的CSV文件时,遇到同样的问题。 我在这里find了答案。 使用Ruby CSV模块打开CSV文件时,需要指定UTF-8的enconding,如下所示:

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

我有一个类似的问题,gemstring磨砂为我自动修复。 https://github.com/hsbt/string-scrub如果给定的string包含一个无效的字节序列,那么该无效的字节序列被replace为Unicodereplace字符(; ),并返回一个新的string。

我从Rails 4.1中得到了同样的隐含错误信息,最近一个项目中的Ruby 2.3.3,stacktrace源于布局application.html.haml

After After之后,罪魁祸首是一个UTF-8字符,最近被添加到所有页面的页脚。 由于一些奇怪的原因,错误只会间歇性地显示出来。

用相应的HTML转义序列replaceUTF-8字符&#xHHHH; 解决了这个问题。

我希望这将在未来的某个时间节省其他人。

为防止编码variables的错误“无法修改冻结的string”,您可以使用: var.dup.force_encoding(Encoding::ASCII_8BIT)var.dup.force_encoding(Encoding::UTF_8)