Ruby-on-rails 不兼容的字符编码:ASCII-8BIT 和 UTF-8
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5286117/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
incompatible character encodings: ASCII-8BIT and UTF-8
提问by Michael Koper
I use Ruby 1.9.2 and Rails 3.0.5
我使用 Ruby 1.9.2 和 Rails 3.0.5
I have the following error:
我有以下错误:
incompatible character encodings: ASCII-8BIT and UTF-8
不兼容的字符编码:ASCII-8BIT 和 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):
错误发生在视图中的这一行(只是一个 div haml 调用):
#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)
采纳答案by Vlad Gurovich
I have a suspicion that you either copy/pasted a part of your Haml template into the file, or you're working with a non-Unicode/non-UTF-8 friendly editor.
我怀疑您将 Haml 模板的一部分复制/粘贴到文件中,或者您正在使用非 Unicode/非 UTF-8 友好编辑器。
See if you can recreate that file from the scratch in a UTF-8 friendly editor. There are plenty for any platform and see whether this fixes your problem. Start by erasing the line with #contentand retyping it manually.
看看您是否可以在 UTF-8 友好编辑器中从头开始重新创建该文件。任何平台都有很多,看看这是否能解决您的问题。首先擦除该行#content并手动重新键入。
回答by Ritesh Kumar
I solved it by following these steps:
我按照以下步骤解决了它:
- Make sure
config.encoding = "utf-8"is in the application.rb file. - Make sure you are using the 'mysql2' gem.
- Put
# encoding: utf-8at the top of file containing UTF-8 characters. Above the
<App Name>::Application.initialize!line in the environment.rb file, add following two lines:Encoding.default_external = Encoding::UTF_8 Encoding.default_internal = Encoding::UTF_8
- 确保
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
http://rorguide.blogspot.com/2011/06/incompatible-character-encodings-ascii.html
回答by mfq
Try to find the exact line which causing this problem and then enforce UTF8 coding, this solution worked for me.
尝试找到导致此问题的确切行,然后强制执行 UTF8 编码,此解决方案对我有用。
title.to_s.force_encoding("UTF-8")
title.to_s.force_encoding("UTF-8")
回答by the Tin Man
ASCII-8BIT is Ruby's description for characters above the normal 0-0x7f ASCII character-set, and that are single-byte characters. Typically that would be something like ISO-8859-1, or one of its siblings.
ASCII-8BIT 是 Ruby 对高于正常 0-0x7f ASCII 字符集的字符的描述,这些字符是单字节字符。通常,这将类似于 ISO-8859-1 或其同级之一。
If you can identify which character is causing the problem, then you can tell Ruby 1.9.2 to convert between the character set of that character to UTF-8.
如果您可以确定哪个字符导致了问题,那么您可以告诉 Ruby 1.9.2 在该字符的字符集与 UTF-8 之间进行转换。
James Grey wrote a series of blogstalking about these sort of problems and how to deal with them. I'd recommend going through them.
James Gray 撰写了一系列博客,讨论此类问题以及如何处理这些问题。我建议通过他们。
incompatible character encodings: ASCII-8BIT and UTF-8
不兼容的字符编码:ASCII-8BIT 和 UTF-8
That typically happens because you are trying to concatenate two strings, and one contains characters that do not map to the character-set of the other string. There are characters in ISO-8859-1 that do not have equivalents in UTF-8, and vice-versa and how to handle string joining with those incompatibilities requires the programmer to step in.
这通常是因为您试图连接两个字符串,其中一个包含未映射到另一个字符串的字符集的字符。ISO-8859-1 中有一些字符在 UTF-8 中没有等价物,反之亦然,如何处理与这些不兼容的字符串连接需要程序员介入。
回答by Daniel Loureiro
you can force UTF8 with force_encoding(Encoding::UTF_8):
您可以使用以下命令强制使用 UTF8 force_encoding(Encoding::UTF_8):
Example:
例子:
<%= yield.force_encoding(Encoding::UTF_8) %>
回答by umitka
For Haml put an encoding hint:
对于 Haml 放置一个编码提示:
-# coding: UTF-8
on the top left of the Haml page.
在 Haml 页面的左上角。
回答by StandDuPp
I installed gem package mysql2.
我安装了 gem 包 mysql2。
gem install mysql2
and then I changed the adapter in mysql2 in database.yml.
然后我在database.yml 中更改了mysql2 中的适配器。
回答by Yllow
The problem was the use of incorrect quotes around the iOS version. Make sure all your quotes are ' and not ‘ or '.
问题是在 iOS 版本周围使用了不正确的引号。确保所有引号都是 ' 而不是 ' 或 '。
回答by carp
I encountered the error while migrating an app from Ruby 1.8.7 to 1.9.3 and it only occured in production. It turned out that I had some leftovers in my Memcache store. The now encoding sensitive Ruby 1.9.3 version of my app tried to mix old ASCII-8BIT values with new UTF-8.
我在将应用程序从 Ruby 1.8.7 迁移到 1.9.3 时遇到了错误,它只发生在生产中。结果发现我的 Memcache 商店里有一些剩菜。我的应用程序的现在编码敏感的 Ruby 1.9.3 版本试图将旧的 ASCII-8BIT 值与新的 UTF-8 混合。
It was as simple as flushing the cache to fix it for me.
这就像刷新缓存来为我修复它一样简单。
回答by remo
I've experienced similar problem. Although I had have UTF-8 encodings solved (with mysql2 and Encoding.default_external = Encoding::UTF_8 ...) incompatible character encodings: UTF-8 and ASCII-8BITarose when I used incorrect helper parameters e.g. f.button :submit, "Zru?i?"- works perfectly but f.button "Zru?i?"- throws encoding error.
我遇到过类似的问题。虽然我已经解决了 UTF-8 编码(使用 mysql2 和 Encoding.default_external = Encoding::UTF_8 ...)不兼容的字符编码:UTF-8 和 ASCII-8BIT在我使用不正确的辅助参数时出现,例如f.button :submit, "Zru?i?"- 工作完美但是f.button "Zru?i?"- 抛出编码错误。

