diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-10-22 17:37:16 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2014-10-22 17:37:16 +0000 |
commit | 2d1866d966d94c688f9cb87c5bf3f096dffac844 (patch) | |
tree | 7a733c1cc51448ab69b3f892285305dbfb0ae15e /lib/redmine/codeset_util.rb | |
parent | a6ec78a4dc658e3517ed682792016b6530458696 (diff) | |
download | redmine-2d1866d966d94c688f9cb87c5bf3f096dffac844.tar.gz redmine-2d1866d966d94c688f9cb87c5bf3f096dffac844.zip |
Merged rails-4.1 branch (#14534).
git-svn-id: http://svn.redmine.org/redmine/trunk@13482 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'lib/redmine/codeset_util.rb')
-rw-r--r-- | lib/redmine/codeset_util.rb | 147 |
1 files changed, 29 insertions, 118 deletions
diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb index 45a5c3524..bb1f972d4 100644 --- a/lib/redmine/codeset_util.rb +++ b/lib/redmine/codeset_util.rb @@ -1,160 +1,71 @@ -if RUBY_VERSION < '1.9' - require 'iconv' -end module Redmine module CodesetUtil def self.replace_invalid_utf8(str) return str if str.nil? - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - if ! str.valid_encoding? - str = str.encode("US-ASCII", :invalid => :replace, - :undef => :replace, :replace => '?').encode("UTF-8") - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new('UTF-8', 'UTF-8') - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end - else - ic = Iconv.new('UTF-8', 'UTF-8') - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1,$!.failed.length] - retry - rescue - txtar += $!.success - end - str = txtar + str.force_encoding('UTF-8') + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") 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) + str.force_encoding("ASCII-8BIT") if str.empty? - str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) + str.force_encoding("UTF-8") 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 + if enc.upcase != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8", :invalid => :replace, + :undef => :replace, :replace => '?') 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 + str.force_encoding("UTF-8") + if ! str.valid_encoding? + str = str.encode("US-ASCII", :invalid => :replace, + :undef => :replace, :replace => '?').encode("UTF-8") end - str = txtar end str end def self.to_utf8_by_setting(str) return str if str.nil? - str = self.to_utf8_by_setting_internal(str) - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end - str + self.to_utf8_by_setting_internal(str).force_encoding('UTF-8') end def self.to_utf8_by_setting_internal(str) return str if str.nil? - if str.respond_to?(:force_encoding) - str.force_encoding('ASCII-8BIT') - end + str.force_encoding('ASCII-8BIT') return str if str.empty? return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end + str.force_encoding('UTF-8') encodings = Setting.repositories_encodings.split(',').collect(&:strip) encodings.each do |encoding| - if str.respond_to?(:force_encoding) - begin - str.force_encoding(encoding) - utf8 = str.encode('UTF-8') - return utf8 if utf8.valid_encoding? - rescue - # do nothing here and try the next encoding - end - else - begin - return Iconv.conv('UTF-8', encoding, str) - rescue Iconv::Failure - # do nothing here and try the next encoding - end + begin + str.force_encoding(encoding) + utf8 = str.encode('UTF-8') + return utf8 if utf8.valid_encoding? + rescue + # do nothing here and try the next encoding end end - str = self.replace_invalid_utf8(str) - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - end - str + self.replace_invalid_utf8(str).force_encoding('UTF-8') end def self.from_utf8(str, encoding) str ||= '' - if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') - if encoding.upcase != 'UTF-8' - str = str.encode(encoding, :invalid => :replace, - :undef => :replace, :replace => '?') - else - str = self.replace_invalid_utf8(str) - end - elsif RUBY_PLATFORM == 'java' - begin - ic = Iconv.new(encoding, 'UTF-8') - str = ic.iconv(str) - rescue - str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?') - end + str.force_encoding('UTF-8') + if encoding.upcase != 'UTF-8' + str = str.encode(encoding, :invalid => :replace, + :undef => :replace, :replace => '?') else - ic = Iconv.new(encoding, 'UTF-8') - txtar = "" - begin - txtar += ic.iconv(str) - rescue Iconv::IllegalSequence - txtar += $!.success - str = '?' + $!.failed[1, $!.failed.length] - retry - rescue - txtar += $!.success - end - str = txtar + str = self.replace_invalid_utf8(str) end end end |