incompatible character encodings: ASCII-8BIT and UTF-8

I use Ruby 1.9.2 and Rails 3.0.5

I have the following error:

incompatible character encodings: ASCII-8BIT and UTF-8

It has nothing to do with the database i think.

The error is happinging on this line in a view (just a div haml call):

#content

full stack:

    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'

My gems:

        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)
138690 次浏览

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

看看是否可以在 UTF-8友好编辑器中从头创建该文件。任何平台都有足够的资源,看看这是否能解决您的问题。首先用 #content擦除该行,然后手动重新输入。

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

如果您能够识别出是哪个字符导致了问题,那么您可以告诉 Ruby1.9.2在该字符的字符集之间转换为 UTF-8。

詹姆斯•格雷(James Grey)写了一篇 series of blogs文章,谈到了这类问题以及如何处理这些问题。我建议你仔细看看。

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

这通常是因为您试图连接两个字符串,其中一个包含不映射到另一个字符串的字符集的字符。ISO-8859-1中有些字符在 UTF-8中没有对等字符,反之亦然,如何处理字符串连接以及这些不兼容性需要程序员介入。

我通过以下步骤解决了这个问题:

  • 确保在 application.rb 文件中有 config.encoding = "utf-8"
  • 确保您使用的是“ mysql2”gem。
  • # encoding: utf-8放在包含 UTF-8字符的文件的顶部。
  • 在環境.rb 文件的 <App Name>::Application.initialize!行之上,添加以下两行:

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

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

我也遇到过类似的问题。尽管我已经解决了 UTF-8编码问题(使用 mysql2和 Encoding ing.default _ foreign = Encoding: : UTF _ 8...) ,但是当我使用不正确的辅助参数(例如 f.button :submit, "Zrušiť")时,不兼容的字符编码: UTF-8和 ASCII-8BIT出现了,f.button "Zrušiť"-抛出编码错误。

试着找出导致这个问题的确切行,然后强制执行 UTF8编码,这个解决方案对我很有效。

Force _ coding (“ UTF-8”)

对于哈姆尔,他给出了一个编码提示:

-# coding: UTF-8

在 Haml 页面的左上角。

I had a similar issue on a custom CoffeeScript file. I solved it by changing the endline encoding from "Unix/Linux" to "Mac OS Classic"

The creation of pdf-documents with the rails-latex-gem lead to a similar problem. 我通过修改 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

我安装了 gem 包 mysql2。

gem install mysql2

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

我在将一个应用程序从 Ruby1.8.7迁移到1.9.3时遇到了这个错误,而且这个错误只发生在生产环境中。我在 Memcache 商店里发现了一些剩菜。目前编码敏感的 Ruby 1.9.3版本尝试将旧的 ASCII-8BIT 值与新的 UTF-8值混合。

只需要冲掉缓存,帮我修好就行了。

只是为了记录: 对我来说,它原来是宝石称为 'mysql'... 显然这是与 US-ASCII 8位默认工作。因此,将它改为称为 Mysql2的 gem (2是这里的重点)解决了我的所有问题。

我查看了上面发布的 gem 列表-Michael Koper 显然已经安装了 mysql2,但我发布了这个,以防有人也有这个问题。.(花了我一些时间去弄明白)。

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

附注: 德语元音符号(ä,ö 和 ü)用 mysql 把它搞砸了

我在解析 Ruby 1.9.2上的 CSV 文件时遇到了同样的问题,这些文件在 Ruby 1.8上被正确地解析了。我找到了答案。当使用 Ruby CSV 模块打开 CSV 文件时,需要指定 UTF-8结尾如下:

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

问题是在 iOS 版本中使用了不正确的引号。确保你所有的引用都是“或者”而不是“或者”。

Https://github.com/cocoapods/cocoapods/issues/829

我也遇到过类似的问题,宝石磨砂机自动帮我解决了。如果给定的字符串包含一个无效的字节序列,那么该无效的字节序列将被 Unicode 替换字符()替换,并返回一个新字符串。

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

例如:

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

在最近的一个项目中,我从 Rails 4.1,Ruby 2.3.3得到了同样神秘的错误消息,堆栈跟踪源自于布局 application.html.haml

经过一番徒劳的搜寻,罪魁祸首是最近被添加到所有页面页脚的 UTF-8字符。由于某种奇怪的原因,错误只会间歇性地出现。

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

我希望这能在将来为其他人节省一些时间。

为了防止错误“不能修改冻结字符串”的编码变量,您可以使用: var.dup.force_encoding(Encoding::ASCII_8BIT)var.dup.force_encoding(Encoding::UTF_8)

如果错误的原因是呈现块,那么这个方法可以工作:

<%= (
render "{SOME_TEMPLATE}", some_variable: some_variable
).force_encoding("UTF-8") %>

我已经拆分了行,以显示括号和力编码