From: Toshi MARUYAMA Date: Sat, 9 Apr 2011 05:41:12 +0000 (+0000) Subject: scm: not use Iconv for log converting in Ruby 1.9 and fix tests fails in Ruby 1.9. X-Git-Tag: 1.2.0~485 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e297c1c24447c1236b885025386eccb8bc28e5ac;p=redmine.git scm: not use Iconv for log converting in Ruby 1.9 and fix tests fails in Ruby 1.9. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5367 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/changeset.rb b/app/models/changeset.rb index 59b2302ac..7039d9905 100644 --- a/app/models/changeset.rb +++ b/app/models/changeset.rb @@ -245,21 +245,28 @@ class Changeset < ActiveRecord::Base private def self.to_utf8(str, encoding) - return str if str.blank? - unless encoding.blank? || encoding == 'UTF-8' - begin - str = Iconv.conv('UTF-8', encoding, str) - rescue Iconv::Failure - # do nothing here - end - end + return str if str.nil? + str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding) + return str if str.empty? + str.force_encoding("UTF-8") if str.respond_to?(:force_encoding) if str.respond_to?(:force_encoding) - str.force_encoding('UTF-8') + enc = encoding.blank? ? "UTF-8" : encoding + if enc != "UTF-8" + str.force_encoding(enc) + str = str.encode("UTF-8") + end if ! str.valid_encoding? str = str.encode("US-ASCII", :invalid => :replace, :undef => :replace, :replace => '?').encode("UTF-8") end else + unless encoding.blank? || encoding == 'UTF-8' + begin + str = Iconv.conv('UTF-8', encoding, str) + rescue Iconv::Failure + # do nothing here + end + end # removes invalid UTF8 sequences begin str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3] diff --git a/test/unit/changeset_test.rb b/test/unit/changeset_test.rb index 0e8c3c2b9..9000193d7 100644 --- a/test/unit/changeset_test.rb +++ b/test/unit/changeset_test.rb @@ -269,9 +269,9 @@ class ChangesetTest < ActiveSupport::TestCase def test_comments_should_be_converted_all_latin1_to_utf8 s1 = "\xC2\x80" s2 = "\xc3\x82\xc2\x80" + s4 = s2.dup if s1.respond_to?(:force_encoding) s3 = s1.dup - s4 = s2.dup s1.force_encoding('ASCII-8BIT') s2.force_encoding('ASCII-8BIT') s3.force_encoding('ISO-8859-1') @@ -289,7 +289,7 @@ class ChangesetTest < ActiveSupport::TestCase :scmid => '12345', :comments => s1) assert( c.save ) - assert_equal s2, c.comments + assert_equal s4, c.comments end def test_identifier