From bb48d96d3037c9ef909af310fc21ef19b7550d52 2011-04-12 05:03:59 From: Toshi MARUYAMA Date: 2011-04-12 05:03:59 Subject: [PATCH] scm: replace invalid utf-8 sequences instead of stripping in displaying repository contents on Ruby 1.8. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5427 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index 36cd90f..c873e1c 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -156,12 +156,18 @@ module RepositoriesHelper :undef => :replace, :replace => '?').encode("UTF-8") end else - # removes invalid UTF8 sequences + ic = Iconv.new('UTF-8', 'UTF-8') + txtar = "" begin - str = Iconv.conv('UTF-8//IGNORE', 'UTF-8', str + ' ')[0..-3] - rescue Iconv::InvalidEncoding - # "UTF-8//IGNORE" is not supported on some OS + txtar += ic.iconv(str) + rescue Iconv::IllegalSequence + txtar += $!.success + str = '?' + $!.failed[1,$!.failed.length] + retry + rescue + txtar += $!.success end + str = txtar end str end diff --git a/test/unit/helpers/repository_helper_test.rb b/test/unit/helpers/repository_helper_test.rb index 9532c30..a1c778e 100644 --- a/test/unit/helpers/repository_helper_test.rb +++ b/test/unit/helpers/repository_helper_test.rb @@ -94,12 +94,10 @@ class RepositoryHelperTest < HelperTestCase s1.force_encoding("ASCII-8BIT") if s1.respond_to?(:force_encoding) str = to_utf8(s1) if str.respond_to?(:force_encoding) - assert_equal "Texte encod? en ISO-8859-1.", str assert str.valid_encoding? assert_equal "UTF-8", str.encoding.to_s - else - assert_equal "Texte encod en ISO-8859-1.", str end + assert_equal "Texte encod? en ISO-8859-1.", str end end end