diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index c6727ae2..4f76c22a 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -117,7 +117,16 @@ module RepositoriesHelper end def to_utf8(str) - return str if str.nil? + return str if str.nil? + str = to_utf8_internal(str) + if str.respond_to?(:force_encoding) + str.force_encoding('UTF-8') + end + str + end + + def to_utf8_internal(str) + return str if str.nil? if str.respond_to?(:force_encoding) str.force_encoding('ASCII-8BIT') end @@ -136,6 +145,7 @@ module RepositoriesHelper end str = replace_invalid_utf8(str) end + private :to_utf8_internal def replace_invalid_utf8(str) if str.respond_to?(:force_encoding) diff --git a/test/unit/helpers/repository_helper_test.rb b/test/unit/helpers/repository_helper_test.rb index c5e66055..42b087ce 100644 --- a/test/unit/helpers/repository_helper_test.rb +++ b/test/unit/helpers/repository_helper_test.rb @@ -69,5 +69,21 @@ class RepositoryHelperTest < HelperTestCase assert_equal "", to_utf8("") assert_equal nil, to_utf8(nil) end -end + def test_to_utf8_returns_ascii_as_utf8 + s1 = "ASCII" + s2 = s1.dup + if s1.respond_to?(:force_encoding) + s1.force_encoding("UTF-8") + s2.force_encoding("ISO-8859-1") + end + str1 = to_utf8(s1) + str2 = to_utf8(s2) + assert_equal s1, str1 + assert_equal s1, str2 + if s1.respond_to?(:force_encoding) + assert_equal "UTF-8", str1.encoding.to_s + assert_equal "UTF-8", str2.encoding.to_s + end + end +end