使用redmine时出现incompatible character encodings: UTF-8 and ASCII-8BIT的解决方法
2011-01-10 20:31
399 查看
今天被这个问题困扰了一天,查了很久的资料,终于解决了,记在这里希望对有同样问题的朋友有帮助 :-)
这可能是由以下两种原因导致:
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
这样我的这个问题就解决了,谁有更好的方法就分享一下~~
这可能是由以下两种原因导致:
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
这样我的这个问题就解决了,谁有更好的方法就分享一下~~
相关文章推荐
- 使用cocoaPods出现:incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
- incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
- .erb 中不能显示从mysql检索出的中文 incompatible character encodings: UTF-8 and ASCII-8BIT
- cocoaPods update出错:incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityEr
- incompatible character encodings: UTF-8 and ASCII-8BIT
- pod install 错误 - incompatible character encodings: UTF-8 and ASCII-8BIT
- incompatible character encodings: UTF-8 and ASCII-8BIT
- 使用Genymotion出现错误INSTALL_FAILED_CPU_ABI_INCOMPATIBLE解决方法
- python 使用eclipse编码运行出现SyntaxError: Non-UTF-8 code starting 解决方法
- 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)
- 使用Genymotion模拟器调试出现INSTALL_FAILED_CPU_ABI_INCOMPATIBLE错误的解决办法
- gentoo中使用emerge更新安装软件是出现的问题及解决方法
- 使用ssh连接centos出现密钥错误的解决方法
- Jetson TX1上使用目标检测库YOLO出现电脑崩溃问题的解决方法
- php使用curl出现Expect:100-continue解决方法
- 使用 Navicat for MySQL 执行 SQL 语句时,出现 out of memory 问题的解决方法
- VB使用Winsock出现 实时错误 '87' 解决方法
- 如果你的程序中必须要用到utf-8时,在datalist的hyperLink中传递汉字避免丢失或者出现问号的解决方法
- 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法