Don't use Iconv with ruby1.9 (#12787).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11177 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang 2013-01-12 21:27:36 +00:00
parent e224d50408
commit ff53a9cfe1
4 changed files with 33 additions and 9 deletions

View File

@ -1,4 +1,6 @@
require 'iconv' if RUBY_VERSION < '1.9'
require 'iconv'
end
module Redmine module Redmine
module CodesetUtil module CodesetUtil
@ -100,10 +102,17 @@ module Redmine
end end
encodings = Setting.repositories_encodings.split(',').collect(&:strip) encodings = Setting.repositories_encodings.split(',').collect(&:strip)
encodings.each do |encoding| encodings.each do |encoding|
begin if str.respond_to?(:force_encoding)
return Iconv.conv('UTF-8', encoding, str) str.force_encoding(encoding)
rescue Iconv::Failure if str.valid_encoding?
# do nothing here and try the next 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
end end
str = self.replace_invalid_utf8(str) str = self.replace_invalid_utf8(str)

View File

@ -17,12 +17,15 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'iconv'
require 'tcpdf' require 'tcpdf'
require 'fpdf/chinese' require 'fpdf/chinese'
require 'fpdf/japanese' require 'fpdf/japanese'
require 'fpdf/korean' require 'fpdf/korean'
if RUBY_VERSION < '1.9'
require 'iconv'
end
module Redmine module Redmine
module Export module Export
module PDF module PDF
@ -86,7 +89,7 @@ module Redmine
def SetTitle(txt) def SetTitle(txt)
txt = begin txt = begin
utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) utf16txt = to_utf16(txt)
hextxt = "<FEFF" # FEFF is BOM hextxt = "<FEFF" # FEFF is BOM
hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join
hextxt << ">" hextxt << ">"
@ -109,6 +112,15 @@ module Redmine
RDMPdfEncoding::rdm_from_utf8(txt, l(:general_pdf_encoding)) RDMPdfEncoding::rdm_from_utf8(txt, l(:general_pdf_encoding))
end 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='') 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) Cell(w, h, fix_text_encoding(txt), border, ln, align, fill, link)
end end
@ -154,7 +166,7 @@ module Redmine
def bookmark_title(txt) def bookmark_title(txt)
txt = begin txt = begin
utf16txt = Iconv.conv('UTF-16BE', 'UTF-8', txt) utf16txt = to_utf16(txt)
hextxt = "<FEFF" # FEFF is BOM hextxt = "<FEFF" # FEFF is BOM
hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join hextxt << utf16txt.unpack("C*").map {|x| sprintf("%02X",x) }.join
hextxt << ">" hextxt << ">"

View File

@ -17,6 +17,10 @@
require 'cgi' require 'cgi'
if RUBY_VERSION < '1.9'
require 'iconv'
end
module Redmine module Redmine
module Scm module Scm
module Adapters module Adapters

View File

@ -16,7 +16,6 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require File.expand_path('../../../../../test_helper', __FILE__) require File.expand_path('../../../../../test_helper', __FILE__)
require 'iconv'
class PdfTest < ActiveSupport::TestCase class PdfTest < ActiveSupport::TestCase
fixtures :users, :projects, :roles, :members, :member_roles, fixtures :users, :projects, :roles, :members, :member_roles,