summaryrefslogtreecommitdiffstats
path: root/lib/redmine/scm/adapters/abstract_adapter.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/redmine/scm/adapters/abstract_adapter.rb')
-rw-r--r--lib/redmine/scm/adapters/abstract_adapter.rb20
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb
index 429d0f17c..c15965595 100644
--- a/lib/redmine/scm/adapters/abstract_adapter.rb
+++ b/lib/redmine/scm/adapters/abstract_adapter.rb
@@ -260,11 +260,21 @@ module Redmine
def scm_iconv(to, from, str)
return nil if str.nil?
return str if to == from
- begin
- Iconv.conv(to, from, str)
- rescue Iconv::Failure => err
- logger.error("failed to convert from #{from} to #{to}. #{err}")
- nil
+ if str.respond_to?(:force_encoding)
+ str.force_encoding(from)
+ begin
+ s = str.encode(to)
+ rescue Exception => e
+ logger.error("failed to convert from #{from} to #{to}. #{err}")
+ nil
+ end
+ else
+ begin
+ Iconv.conv(to, from, str)
+ rescue Iconv::Failure => err
+ logger.error("failed to convert from #{from} to #{to}. #{err}")
+ nil
+ end
end
end