Redmine/lib/redmine/codeset_util.rb
Toshi MARUYAMA a367732d4d scm: fix JRuby tests fail in unit changeset following test.
* test_invalid_utf8_sequences_in_paths_should_be_replaced

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6021 e93f8b46-1217-0410-a6f0-8f06a7374b81
2011-06-09 01:30:05 +00:00

39 lines
948 B
Ruby

require 'iconv'
module Redmine
module CodesetUtil
def self.replace_invalid_utf8(str)
return str if str.nil?
if str.respond_to?(:force_encoding)
str.force_encoding('UTF-8')
if ! str.valid_encoding?
str = str.encode("US-ASCII", :invalid => :replace,
:undef => :replace, :replace => '?').encode("UTF-8")
end
elsif RUBY_PLATFORM == 'java'
begin
ic = Iconv.new('UTF-8', 'UTF-8')
str = ic.iconv(str)
rescue
str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
end
else
ic = Iconv.new('UTF-8', 'UTF-8')
txtar = ""
begin
txtar += ic.iconv(str)
rescue Iconv::IllegalSequence
txtar += $!.success
str = '?' + $!.failed[1,$!.failed.length]
retry
rescue
txtar += $!.success
end
str = txtar
end
str
end
end
end