`
firmgoal
  • 浏览: 7374 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Ruby 1.9.1+Rails 2.3.2+ActiveScaffold 1.2RC1 编码问题

阅读更多

环境:Ruby 1.9.1+Rails2.3.2+ActiveScaffold 1.2RC1,错误提示:

Encoding::CompatibilityError

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


 

这个问题会有两种情况导致:

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

      问题所在:Ruby 1.9.1的ERB处理编码的方式,看代码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的。

     解决方案:大家给点建议吧,SET NAME无效、database.yml的encoding无效。我最后是修改mysql_adapter

 

    def select(sql, name = nil)
          @connection.query_with_result = true
          result = execute(sql, name)
          rows = result.all_hashes
          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
#以上为新加部分
          rows
        end

分享到:
评论
8 楼 山雨欲来风满楼 2009-12-08  
也碰到这个问题了, 问题是 mysql 2.8.1的GEM 好像有问题,只能返回 ascii-8bit

确实前面的一些 方法不能工作, 只有改动 mysql-adaptor 比较简单。但是这个方案是不是影响数据库的读取效率?

国外有人改了 mysql.c ,需要重新编译,在windows上不好弄。

真希望有人能更新下 mysql的GEM,这个问题谁也绕不过去的。
7 楼 oCameLo 2009-05-28  
看吧,果然一堆麻烦。XD

未来如果ruby再把String改成Unicode String,肯定会再出一堆麻烦。
6 楼 点沧掌门 2009-05-27  
楼主,这篇文章是翻译的吧?我是了一下,两条都没有效果。两个问题都没解决
5 楼 carlosbdw 2009-05-06  
除了activescaffold还有比较好用的插件吗?
4 楼 carlosbdw 2009-05-06  
hehe ,不升级不就完了,客户要的是稳定的系统。
3 楼 suqing 2009-05-04  
我用rails 2.3.2 + ruby1.8.6,错误提示,貌似是rails版本问题,请问是怎么解决的:
c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method': undefined method `find_full_template_path' for class `ActionView::Base' (NameError)

        from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/module/aliasing.rb:33:in `alias_method_chain'

        from D:/ruby example/RailsApplication2/vendor/plugins/active_scaffold/lib/extensions/generic_view_paths.rb:33

        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'

        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

        from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'

        from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:521:in `new_constants_in'

        from c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:156:in `require'

        from D:/ruby example/RailsApplication2/vendor/plugins/active_scaffold/environment.rb:63

         ... 25 levels...

        from c:/ruby/lib/ruby/gems/1.8/gems/rails-2.3.2/lib/commands/server.rb:84

        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'

        from c:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'

2 楼 t0uch 2009-03-27  
Scaffold的话还是不要用了,没看到有什么特别的地方
1 楼 真无名 2009-03-27  
activescaffold的支持也是非常差的
bug也是长年类月没改进的
我觉得不要把这些支持都很差的一起用吧。
好痛苦的

相关推荐

    SVN_1.9.1+汉化+VisualSVN

    在给定的标题“SVN_1.9.1+汉化+VisualSVN”中,我们看到的是SVN的一个特定版本——1.9.1,它已经包含了汉化包,意味着该版本已经被翻译成中文,方便中国用户使用。同时,VisualSVN也被提及,这是一个在Microsoft ...

    八戒农场小程序v1.9.1+前端源码

    八戒农场小程序v1.9.1+前端源码

    multipass-1.9.1+win-win64.exe

    multipass-1.9.1+win-win64.exe

    doxygen1.9.1+ graphviz2.47.2 + HTML Help Workshop1.3.rar

    【标题】"doxygen1.9.1+ graphviz2.47.2 + HTML Help Workshop1.3.rar" 提供的是一套完整的工具集合,主要用于文档生成和图形化表示,其中包含了三个主要组件:Doxygen、Graphviz 和 HTML Help Workshop。...

    Ruby1.9.1released.zip

    ruby 1.9是ruby发展历史上的一个里程碑版本: 1、ruby 1.9首次引入字节码即时编译技术,可以大大提高ruby本身的性能。根据之前的综合评测来看,1.9的性能大约是1.8.6的三倍左右,性能追上了Python。 2、ruby 1.9...

    flutter_windows_v1.9.1+hotfix.6-stable.zip

    "flutter_windows_v1.9.1+hotfix.6-stable.zip"这个压缩包是Flutter SDK的一个稳定版本,适用于Windows操作系统。 在Flutter SDK的下载过程中,有时可能会遇到因网络问题导致的下载速度慢。在这种情况下,开发者...

    ruby1.9.1文档和一本pdf

    2. **编码处理**:Ruby 1.9 开始强制处理字符串的编码问题,每个字符串都有自己的编码类型,这大大增强了对多语言文本的支持。`encoding`关键字可用于声明源代码的编码。 3. **块和 Proc 对象**:Ruby 1.9 中,块...

    jquery1.9.1+bootstrap3.3.7

    《jQuery 1.9.1与Bootstrap 3.3.7的协同工作详解》 在Web开发领域,jQuery和Bootstrap是两个广泛使用的开源库,它们极大地简化了前端开发的复杂性。本文将深入探讨jQuery 1.9.1与Bootstrap 3.3.7之间的兼容性和协同...

    适合Ruby 1.9.1的Ruby-FCGI源码包

    总的来说,这个特定的Ruby-FCGI源码包是为了解决在Ruby 1.9.1上的兼容性问题,让你能够在该版本的Ruby环境中顺利地开发和运行FastCGI应用。通过深入理解FastCGI协议、Ruby C扩展以及Ruby 1.9.1的特性,你可以充分...

    FireBug1.9.1+yslow3.1.0

    FireBug是一款集成在Firefox浏览器中的开源开发者工具,版本1.9.1在当时是一个非常重要的更新。它提供了丰富的功能,包括HTML、CSS、JavaScript的实时编辑和调试,网络请求分析,性能监控等。以下是一些关键知识点:...

    八戒农场小程序v1.9.1+前端

    八戒农场v1.9.1小程序是一个很好的农场筹款平台,在那里你可以自由地饲养宠物、猪、牛来赚钱,并且可以为不同种类的动物筹集不同种类的收入,现在下载注册用户还可以得到小猪奖励哦,只要你在平台上饲养就可以赚钱,...

    【工作点滴】用VS 2010 编译 Ruby 1.9.1

    1. **获取源代码**:首先需要从Ruby官方仓库或镜像站点下载Ruby 1.9.1的源代码包。 2. **安装编译工具**:确保已经安装了Visual Studio 2010,并且包含了C++的编译器和相关工具。 3. **设置环境变量**:为了正确...

    torch-1.9.0+cu11 离线whl安装

    torch-1.9.0+cu111-cp39-cp39-win_amd64.whl torchvision-0.10.0+cu111-cp39-cp39-win_amd64 typing_extensions-4.9.0-py3-none-any.whl

    Themida & WinLicen 系列脱壳脚本【新】

    Themida & WinLicen 1.1.X - 1.8.X ...TMDScript-1.9.1+_1.0 final_修正集成版.osc Themida脱壳脚本增强版.osc TMDScript-1.9.1+_1.0final.osc TMDScript-1.9.1+_private_0.7.osc TMD版本查询.osc tmd全系列iat修复.osc

    torchvision-0.9.1+cu111-cp37-cp37m-win_amd64.whl.zip

    torchvision-0.9.1+cu111-cp37-cp37m-win_amd64.whl.zip

    torchvision-0.9.1+cu111-cp39-cp39-linux_x86_64.whl

    torchvision-0.9.1+cu111-cp39-cp39-linux_x86_64.whl

    svn1.9.1 32+64+客户端+汉化包.zip

    在SVN 1.9.1中,这一问题得到了解决,使得用户即使在网络不稳定或离线状态下也能正常工作。 其次,这个压缩包包含了32位和64位的客户端安装程序,确保了无论用户使用哪种架构的操作系统,都能顺利安装并使用SVN。32...

Global site tag (gtag.js) - Google Analytics