From: Toshi MARUYAMA Date: Mon, 14 Nov 2011 23:04:45 +0000 (+0000) Subject: move Changeset#to_utf8 logic to lib/redmine/codeset_util.rb for common use (#3261) X-Git-Tag: 1.3.0~201 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9a93bd1484db1f6bb671f12bf3827a1c504023ca;p=redmine.git move Changeset#to_utf8 logic to lib/redmine/codeset_util.rb for common use (#3261) git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7810 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 4f08c2e95..e8438f11f 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -264,46 +264,6 @@ class Changeset < ActiveRecord::Base end def self.to_utf8(str, encoding) - return str if str.nil? - str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) - if str.empty? - str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) - return str - end - enc = encoding.blank? ? "UTF-8" : encoding - if str.respond_to?(:force_encoding) - if enc.upcase != "UTF-8" - str.force_encoding(enc) - str = str.encode("UTF-8", :invalid => :replace, - :undef => :replace, :replace => '?') - else - str.force_encoding("UTF-8") - if ! str.valid_encoding? - str = str.encode("US-ASCII", :invalid => :replace, - :undef => :replace, :replace => '?').encode("UTF-8") - end - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new('UTF-8', enc) - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end - else - ic = Iconv.new('UTF-8', enc) - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1,$!.failed.length] - retry - rescue - txtar += $!.success - end - str = txtar - end - str + Redmine::CodesetUtil.to_utf8(str, encoding) end end diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb index 945b3ea7b..5188a355c 100644 --- a/lib/redmine/codeset_util.rb +++ b/lib/redmine/codeset_util.rb @@ -34,5 +34,49 @@ module Redmine end str end + + def self.to_utf8(str, encoding) + return str if str.nil? + str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) + if str.empty? + str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) + return str + end + enc = encoding.blank? ? "UTF-8" : encoding + if str.respond_to?(:force_encoding) + if enc.upcase != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') + else + str.force_encoding("UTF-8") + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") + end + end + elsif RUBY_PLATFORM == 'java' + begin + ic = Iconv.new('UTF-8', enc) + str = ic.iconv(str) + rescue + str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') + end + else + ic = Iconv.new('UTF-8', enc) + txtar = "" + begin + txtar += ic.iconv(str) + rescue Iconv::IllegalSequence + txtar += $!.success + str = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success + end + str = txtar + end + str + end end end