环境: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
分享到:
- 2009-03-27 09:30
- 浏览 1399
- 评论(8)
- 论坛回复 / 浏览 (8 / 5939)
- 查看更多
相关推荐
在给定的标题“SVN_1.9.1+汉化+VisualSVN”中,我们看到的是SVN的一个特定版本——1.9.1,它已经包含了汉化包,意味着该版本已经被翻译成中文,方便中国用户使用。同时,VisualSVN也被提及,这是一个在Microsoft ...
八戒农场小程序v1.9.1+前端源码
multipass-1.9.1+win-win64.exe
【标题】"doxygen1.9.1+ graphviz2.47.2 + HTML Help Workshop1.3.rar" 提供的是一套完整的工具集合,主要用于文档生成和图形化表示,其中包含了三个主要组件:Doxygen、Graphviz 和 HTML Help Workshop。...
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 SDK的一个稳定版本,适用于Windows操作系统。 在Flutter SDK的下载过程中,有时可能会遇到因网络问题导致的下载速度慢。在这种情况下,开发者...
2. **编码处理**:Ruby 1.9 开始强制处理字符串的编码问题,每个字符串都有自己的编码类型,这大大增强了对多语言文本的支持。`encoding`关键字可用于声明源代码的编码。 3. **块和 Proc 对象**:Ruby 1.9 中,块...
《jQuery 1.9.1与Bootstrap 3.3.7的协同工作详解》 在Web开发领域,jQuery和Bootstrap是两个广泛使用的开源库,它们极大地简化了前端开发的复杂性。本文将深入探讨jQuery 1.9.1与Bootstrap 3.3.7之间的兼容性和协同...
总的来说,这个特定的Ruby-FCGI源码包是为了解决在Ruby 1.9.1上的兼容性问题,让你能够在该版本的Ruby环境中顺利地开发和运行FastCGI应用。通过深入理解FastCGI协议、Ruby C扩展以及Ruby 1.9.1的特性,你可以充分...
FireBug是一款集成在Firefox浏览器中的开源开发者工具,版本1.9.1在当时是一个非常重要的更新。它提供了丰富的功能,包括HTML、CSS、JavaScript的实时编辑和调试,网络请求分析,性能监控等。以下是一些关键知识点:...
八戒农场v1.9.1小程序是一个很好的农场筹款平台,在那里你可以自由地饲养宠物、猪、牛来赚钱,并且可以为不同种类的动物筹集不同种类的收入,现在下载注册用户还可以得到小猪奖励哦,只要你在平台上饲养就可以赚钱,...
1. **获取源代码**:首先需要从Ruby官方仓库或镜像站点下载Ruby 1.9.1的源代码包。 2. **安装编译工具**:确保已经安装了Visual Studio 2010,并且包含了C++的编译器和相关工具。 3. **设置环境变量**:为了正确...
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 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-cp39-cp39-linux_x86_64.whl
在SVN 1.9.1中,这一问题得到了解决,使得用户即使在网络不稳定或离线状态下也能正常工作。 其次,这个压缩包包含了32位和64位的客户端安装程序,确保了无论用户使用哪种架构的操作系统,都能顺利安装并使用SVN。32...