代码之家  ›  专栏  ›  技术社区  ›  jspooner Ryan Bigg

为什么在我升级到Rails 3之后所有的字符串都是ASCII-8BIT?

  •  7
  • jspooner Ryan Bigg  · 技术社区  · 14 年前

    现在我视图中的所有字符串都是ASCII-8BIT?

    应用程序.rb

    config.encoding = "utf-8"
    

    数据库.yml

    development:
      adapter: mysql
      encoding: utf8
    

    我在跑步

    OS X
    RVM rvm 1.0.16 
    Ruby ruby-1.9.2-p0
    Rails 3.0.1
    

    我希望enoding是UTF 8而不是ASCII

    business.desc.encoding
    # ASCII-8BIT
    

    <p class="description"><%= truncate(business.desc, :length => 17) %></p>
    

    错误

    incompatible character encodings: ASCII-8BIT and UTF-8
    
    activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat'
    activesupport (3.0.1) lib/active_support/core_ext/string/output_safety.rb:74:in `concat'
    actionpack (3.0.1) lib/action_view/template/handlers/erb.rb:14:in `<<'
    app/views/browse/businesses.html.erb:15:in `block in _app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092'
    app/views/browse/businesses.html.erb:3:in `each'
    app/views/browse/businesses.html.erb:3:in `each_with_index'
    app/views/browse/businesses.html.erb:3:in `_app_views_browse_businesses_html_erb___1616718260917998189_2173630500__1134905695726531092'
    

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  4
  •   Nerian    14 年前

    您需要将此添加到每个.rb文件:

    <% # coding: UTF-8 %>
    

    $ cd app/ 
    $ magic_encoding
    

    默认值是UTF-8,但是可以指定任何想要的参数。

        2
  •  6
  •   oma    13 年前

    # coding: UTF-8
    

    更新使用如Nerian所述的magic_编码。

    基本上和下面一样,但是更好。

    我有一个我不记得在哪里找到的耙子任务(这家伙真是太棒了!)我稍微修改了一下,把这个放在每个文件的上面。我听人说以上(你所做的)应该足够了,但这对我不起作用。。。

    不管怎样,这是rake任务,复制粘贴就行了


    lib/tasks/utf8encode.rake
    
    # coding: UTF-8
    
    desc "Manage the encoding header of Ruby files"
    task :utf8_encode_headers => :environment do
      files = Array.new
      ["*.rb", "*.rake"].each do |extension|
        files.concat(Dir[ File.join(Dir.getwd.split(/\\/), "**", extension) ])
      end
    
      files.each do |file|
        content = File.read(file)
        next if content[0..16] == "# coding: UTF-8\n\n" ||
                content[0..22] == "# -*- coding: utf-8 -*-"
    
       ["\n\n", "\n"].each do |file_end|
          content = content.gsub(/(# encoding: UTF-8#{file_end})|(# coding: UTF-8#{file_end})|(# -*- coding: UTF-8 -*-#{file_end})|(# -*- coding: utf-8 -*-#{file_end})/i, "")
        end
    
        new_file = File.open(file, "w")
        new_file.write("# coding: UTF-8\n\n"+content)
        new_file.close
      end
    end
    
        3
  •  2
  •   Bob Wentz    14 年前

    我将使用postregsql从Ruby 1.8.6和Rails 2.3.5迁移到Ruby 1.9.2和Rails 3.0.3。为了让这个工作在我的项目中进行,我必须将它添加到正在翻译的任何视图模板的顶部:

    <% # coding: UTF-8 %>
    

    Ole提供的rake任务也应该很容易修改。不过,我觉得他给出的解决方案没有任何效果。

    推荐文章