diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb index b74a3a9e7..41ea85153 100644 --- a/lib/redmine/codeset_util.rb +++ b/lib/redmine/codeset_util.rb @@ -1,4 +1,6 @@ -require 'iconv' +if RUBY_VERSION < '1.9' + require 'iconv' +end module Redmine module CodesetUtil @@ -100,10 +102,17 @@ module Redmine 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 + if str.respond_to?(:force_encoding) + str.force_encoding(encoding) + if str.valid_encoding? + return str.encode('UTF-8') + end + else + begin + return Iconv.conv('UTF-8', encoding, str) + rescue Iconv::Failure + # do nothing here and try the next encoding + end end end str = self.replace_invalid_utf8(str) diff --git a/lib/redmine/export/pdf.rb b/lib/redmine/export/pdf.rb index e650964eb..ff3993f72 100644 --- a/lib/redmine/export/pdf.rb +++ b/lib/redmine/export/pdf.rb @@ -17,12 +17,15 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -require 'iconv' require 'tcpdf' require 'fpdf/chinese' require 'fpdf/japanese' require 'fpdf/korean' +if RUBY_VERSION < '1.9' + require 'iconv' +end + module Redmine module Export module PDF @@ -86,7 +89,7 @@ module Redmine def SetTitle(txt) txt = begin - utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) + utf16txt = to_utf16(txt) hextxt = "" @@ -109,6 +112,15 @@ module Redmine RDMPdfEncoding::rdm_from_utf8(txt, l(:general_pdf_encoding)) end + # Encodes an UTF-8 string to UTF-16BE + def to_utf16(str) + if str.respond_to?(:encode) + str.encode('UTF-16BE') + else + Iconv.conv('UTF-16BE', 'UTF-8', str) + end + end + def RDMCell(w ,h=0, txt='', border=0, ln=0, align='', fill=0, link='') Cell(w, h, fix_text_encoding(txt), border, ln, align, fill, link) end @@ -154,7 +166,7 @@ module Redmine def bookmark_title(txt) txt = begin - utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) + utf16txt = to_utf16(txt) hextxt = "" diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb index 0f77d58d8..4458baa7e 100644 --- a/lib/redmine/scm/adapters/abstract_adapter.rb +++ b/lib/redmine/scm/adapters/abstract_adapter.rb @@ -17,6 +17,10 @@ require 'cgi' +if RUBY_VERSION < '1.9' + require 'iconv' +end + module Redmine module Scm module Adapters diff --git a/test/unit/lib/redmine/export/pdf_test.rb b/test/unit/lib/redmine/export/pdf_test.rb index 6046ab97c..7b9488de0 100644 --- a/test/unit/lib/redmine/export/pdf_test.rb +++ b/test/unit/lib/redmine/export/pdf_test.rb @@ -16,7 +16,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require File.expand_path('../../../../../test_helper', __FILE__) -require 'iconv' class PdfTest < ActiveSupport::TestCase fixtures :users, :projects, :roles, :members, :member_roles,