-require 'iconv'
+if RUBY_VERSION < '1.9'
+ require 'iconv'
+end
module Redmine
module CodesetUtil
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)
# 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
def SetTitle(txt)
txt = begin
- utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt)
+ utf16txt = to_utf16(txt)
hextxt = "<FEFF" # FEFF is BOM
hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join
hextxt << ">"
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
def bookmark_title(txt)
txt = begin
- utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt)
+ utf16txt = to_utf16(txt)
hextxt = "<FEFF" # FEFF is BOM
hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join
hextxt << ">"
# 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,