使用redmine时出现incompatible character encodings: UTF-8 and ASCII-8BIT的解决方法

原创 2011年01月10日 20:31:00

今天被这个问题困扰了一天,查了很久的资料,终于解决了,记在这里希望对有同样问题的朋友有帮助  :-)


这可能是由以下两种原因导致:

1、问题环境:模板中有<%="汉字"%>,且有UTF-8的字串变量,如I18n.t(:hello)返回的是UTF-8串。

      问题所在:Ruby 1.9.1的ERB处理编码的方式,看C:/Ruby192/lib/ruby/1.9.1中的erb.rb文件

 

def compile(s)
      enc = s.encoding
      raise ArgumentError, "#{enc} is not ASCII compatible" if enc.dummy?
      s = s.dup.force_encoding("ASCII-8BIT") # don't use constant Enoding::ASCII_8BIT for miniruby
      enc = detect_magic_comment(s) || enc

.....

 

这样,s的编码是"ASCII-8BIT",模板就是ASCII-8BIT编码,当有UTF-8的字串变量concat时,出错。

      解决方案:在 enc = detect_magic_comment(s) || enc 后添加一行 s.force_encoding(enc)

2、问题环境:数据库返回UTF-8的数据时,ActiveScaffold的列表以及查看出错。

      问题所在:ActiveRecord返回的数据,编码成了ASCII-8BIT,看代码list_column_helps.rb

def format_value(column_value, options = {})
        if column_empty?(column_value)
          active_scaffold_config.list.empty_field_text
        elsif column_value.is_a?(Time) || column_value.is_a?(Date)
          l(column_value, :format => options[:format] || :default)
        else
          column_value.to_s
        end
      end

我查到这里返回的值就是ASCII-8BIT编码了。查了下,从mysql_adapater出来的数据就是ASCII-8BIT的。

     解决方案:修改redmine根目录下的vendor/rails/activerecord/lib/active_record/connection_adapters中的mysql_adapter.rb文件,

 找到以下代码:

    def select(sql, name = nil)
          @connection.query_with_result = true
          result = execute(sql, name)
          rows = result.all_hashes
          result.free

          rows
        end

在result.free下面增加以下代码

          if @config[:encoding] && @config[:encoding]=="utf8"
            rows.each do |row|
              row.each do |key, value|
                if (value.class == String)
                  value.force_encoding("UTF-8")
                end
              end
            end
          end


这样我的这个问题就解决了,谁有更好的方法就分享一下~~

incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)

$ pod install --no-repo-update /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/user_in...
  • qq469236803
  • qq469236803
  • 2015年03月05日 14:20
  • 2229

使用cocoaPods出现:incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)

使用cocoaPods安装AFNetworking时出现: incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::Com...
  • duoduo_333
  • duoduo_333
  • 2015年02月04日 17:44
  • 2283

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

http://stackoverflow.com/questions/5286117/incompatible-character-encodings-ascii-8bit-and-utf-8 ...
  • shiralwz
  • shiralwz
  • 2015年10月21日 18:26
  • 616

ruby to_json "\xE6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)

ruby 中 string 类型的 to_json 方法有bug 报错为 "\xE6" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionE...
  • xiaofei125145
  • xiaofei125145
  • 2017年08月24日 19:57
  • 719

compass watch Encoding::CompatibilityError on line ["87"] encodings: GBK and UTF-8

$ compass watch >>> Compass is watching for changes. Press Ctrl-C to Stop. Encoding::CompatibilityEr...
  • weixin_41424247
  • weixin_41424247
  • 2017年12月18日 15:48
  • 60

sublime 编译sass时CompatibilityError

  • 2016年03月29日 10:04
  • 130KB
  • 下载

redmine开发环境建立笔记

The following steps are based on WinXP sp3 platform. 1 install instantrails2.0 2 update rails as fol...
  • iefreer
  • iefreer
  • 2010年03月22日 00:00
  • 5271

cocoapods 错误分析整理 和 cocoapods 在Xcode使用

关于cocoapods 安装这里不在多说了,请参见
  • Folish_Audi
  • Folish_Audi
  • 2014年07月07日 15:38
  • 2701

使用redmine时出现incompatible character encodings: UTF-8 and ASCII-8BIT的解决方法

今天被这个问题困扰了一天,查了很久的资料,终于解决了,记在这里希望对有同样问题的朋友有帮助  :-)这可能是由以下两种原因导致:1、问题环境:模板中有,且有UTF-8的字串变量,如I18n.t(:he...
  • Sapphire_aling
  • Sapphire_aling
  • 2011年01月10日 20:31
  • 8560

关于vagrant 的坑

一、当大家使用vagrant up 时  出现 D:/soft/Vagrant/embedded/gems/gemsildprocess-0.6.3bildprocess/windows/proce...
  • qq_39256527
  • qq_39256527
  • 2017年12月06日 16:57
  • 47
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用redmine时出现incompatible character encodings: UTF-8 and ASCII-8BIT的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)