move Changeset#to_utf8 logic to lib/redmine/codeset_util.rb for common use (#3261)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@7810 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
38089d9a56
commit
9a93bd1484
|
@ -264,46 +264,6 @@ class Changeset < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.to_utf8(str, encoding)
|
def self.to_utf8(str, encoding)
|
||||||
return str if str.nil?
|
Redmine::CodesetUtil.to_utf8(str, encoding)
|
||||||
str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
|
|
||||||
if str.empty?
|
|
||||||
str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
|
|
||||||
return str
|
|
||||||
end
|
|
||||||
enc = encoding.blank? ? "UTF-8" : encoding
|
|
||||||
if str.respond_to?(:force_encoding)
|
|
||||||
if enc.upcase != "UTF-8"
|
|
||||||
str.force_encoding(enc)
|
|
||||||
str = str.encode("UTF-8", :invalid => :replace,
|
|
||||||
:undef => :replace, :replace => '?')
|
|
||||||
else
|
|
||||||
str.force_encoding("UTF-8")
|
|
||||||
if ! str.valid_encoding?
|
|
||||||
str = str.encode("US-ASCII", :invalid => :replace,
|
|
||||||
:undef => :replace, :replace => '?').encode("UTF-8")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elsif RUBY_PLATFORM == 'java'
|
|
||||||
begin
|
|
||||||
ic = Iconv.new('UTF-8', enc)
|
|
||||||
str = ic.iconv(str)
|
|
||||||
rescue
|
|
||||||
str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
|
|
||||||
end
|
|
||||||
else
|
|
||||||
ic = Iconv.new('UTF-8', enc)
|
|
||||||
txtar = ""
|
|
||||||
begin
|
|
||||||
txtar += ic.iconv(str)
|
|
||||||
rescue Iconv::IllegalSequence
|
|
||||||
txtar += $!.success
|
|
||||||
str = '?' + $!.failed[1,$!.failed.length]
|
|
||||||
retry
|
|
||||||
rescue
|
|
||||||
txtar += $!.success
|
|
||||||
end
|
|
||||||
str = txtar
|
|
||||||
end
|
|
||||||
str
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -34,5 +34,49 @@ module Redmine
|
||||||
end
|
end
|
||||||
str
|
str
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.to_utf8(str, encoding)
|
||||||
|
return str if str.nil?
|
||||||
|
str.force_encoding("ASCII-8BIT") if str.respond_to?(:force_encoding)
|
||||||
|
if str.empty?
|
||||||
|
str.force_encoding("UTF-8") if str.respond_to?(:force_encoding)
|
||||||
|
return str
|
||||||
|
end
|
||||||
|
enc = encoding.blank? ? "UTF-8" : encoding
|
||||||
|
if str.respond_to?(:force_encoding)
|
||||||
|
if enc.upcase != "UTF-8"
|
||||||
|
str.force_encoding(enc)
|
||||||
|
str = str.encode("UTF-8", :invalid => :replace,
|
||||||
|
:undef => :replace, :replace => '?')
|
||||||
|
else
|
||||||
|
str.force_encoding("UTF-8")
|
||||||
|
if ! str.valid_encoding?
|
||||||
|
str = str.encode("US-ASCII", :invalid => :replace,
|
||||||
|
:undef => :replace, :replace => '?').encode("UTF-8")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elsif RUBY_PLATFORM == 'java'
|
||||||
|
begin
|
||||||
|
ic = Iconv.new('UTF-8', enc)
|
||||||
|
str = ic.iconv(str)
|
||||||
|
rescue
|
||||||
|
str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
|
||||||
|
end
|
||||||
|
else
|
||||||
|
ic = Iconv.new('UTF-8', enc)
|
||||||
|
txtar = ""
|
||||||
|
begin
|
||||||
|
txtar += ic.iconv(str)
|
||||||
|
rescue Iconv::IllegalSequence
|
||||||
|
txtar += $!.success
|
||||||
|
str = '?' + $!.failed[1,$!.failed.length]
|
||||||
|
retry
|
||||||
|
rescue
|
||||||
|
txtar += $!.success
|
||||||
|
end
|
||||||
|
str = txtar
|
||||||
|
end
|
||||||
|
str
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue