summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/helpers/repositories_helper.rb29
-rw-r--r--lib/redmine/codeset_util.rb34
2 files changed, 35 insertions, 28 deletions
diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb
index 69f2e2558..de017ef9b 100644
--- a/app/helpers/repositories_helper.rb
+++ b/app/helpers/repositories_helper.rb
@@ -117,35 +117,8 @@ module RepositoriesHelper
end
def to_utf8(str)
- 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
- return str if str.empty?
- return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
- if str.respond_to?(:force_encoding)
- str.force_encoding('UTF-8')
- end
- @encodings ||= Setting.repositories_encodings.split(',').collect(&:strip)
- @encodings.each do |encoding|
- begin
- return Iconv.conv('UTF-8', encoding, str)
- rescue Iconv::Failure
- # do nothing here and try the next encoding
- end
- end
- str = Redmine::CodesetUtil.replace_invalid_utf8(str)
+ Redmine::CodesetUtil.to_utf8_by_setting(str)
end
- private :to_utf8_internal
def repository_field_tags(form, repository)
method = repository.class.name.demodulize.underscore + "_field_tags"
diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb
index bf24080c6..b74a3a9e7 100644
--- a/lib/redmine/codeset_util.rb
+++ b/lib/redmine/codeset_util.rb
@@ -79,6 +79,40 @@ module Redmine
str
end
+ def self.to_utf8_by_setting(str)
+ return str if str.nil?
+ str = self.to_utf8_by_setting_internal(str)
+ if str.respond_to?(:force_encoding)
+ str.force_encoding('UTF-8')
+ end
+ str
+ end
+
+ def self.to_utf8_by_setting_internal(str)
+ return str if str.nil?
+ if str.respond_to?(:force_encoding)
+ str.force_encoding('ASCII-8BIT')
+ end
+ return str if str.empty?
+ return str if /\A[\r\n\t\x20-\x7e]*\Z/n.match(str) # for us-ascii
+ if str.respond_to?(:force_encoding)
+ str.force_encoding('UTF-8')
+ end
+ encodings = Setting.repositories_encodings.split(',').collect(&:strip)
+ encodings.each do |encoding|
+ begin
+ return Iconv.conv('UTF-8', encoding, str)
+ rescue Iconv::Failure
+ # do nothing here and try the next encoding
+ end
+ end
+ str = self.replace_invalid_utf8(str)
+ if str.respond_to?(:force_encoding)
+ str.force_encoding('UTF-8')
+ end
+ str
+ end
+
def self.from_utf8(str, encoding)
str ||= ''
if str.respond_to?(:force_encoding)