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