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
end
str = replace_invalid_utf8(str)
end
+ private :to_utf8_internal
def replace_invalid_utf8(str)
if str.respond_to?(:force_encoding)
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