diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-02 15:36:48 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-03-02 15:36:48 +0000 |
commit | f25ff846f6884e202d13ab28e3e10c917b9cdf31 (patch) | |
tree | 1912c745ed74d061e3213706184d63af6d7963a1 /lib/rexml/encoding.rb | |
parent | cddcffb8f9dd015650b2ac02235bfe39261989f9 (diff) | |
download | ruby-f25ff846f6884e202d13ab28e3e10c917b9cdf31.tar.gz |
* lib/rexml/encoding.rb (REXML::Encoding#encoding=): store @encoding
a String which means the name of the encoding.
this partially revert r29646.
* lib/rexml/document.rb: follow above.
* lib/rexml/output.rb: ditto.
* lib/rexml/parsers/baseparser.rb: ditto.
* lib/rexml/source.rb: ditto.
* lib/rexml/xmldecl.rb: ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31008 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rexml/encoding.rb')
-rw-r--r-- | lib/rexml/encoding.rb | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/lib/rexml/encoding.rb b/lib/rexml/encoding.rb index 3e7bdfb6aa..d1d5172841 100644 --- a/lib/rexml/encoding.rb +++ b/lib/rexml/encoding.rb @@ -1,8 +1,9 @@ module REXML module Encoding - # ID ---> Encoding object + # ID ---> Encoding name attr_reader :encoding def encoding=(encoding) + encoding = encoding.name if encoding.is_a?(Encoding) if encoding.is_a?(String) original_encoding = encoding encoding = find_encoding(encoding) @@ -11,35 +12,25 @@ module REXML end end return false if defined?(@encoding) and encoding == @encoding - if encoding and encoding != ::Encoding::UTF_8 - @encoding = encoding + if encoding + @encoding = encoding.upcase else - @encoding = ::Encoding::UTF_8 + @encoding = 'UTF-8' end true end def check_encoding(xml) - # We have to recognize UTF-16, LSB UTF-16, and UTF-8 + # We have to recognize UTF-16BE, UTF-16LE, and UTF-8 if xml[0, 2] == "\xfe\xff" xml[0, 2] = "" - ::Encoding::UTF_16BE + return 'UTF-16BE' elsif xml[0, 2] == "\xff\xfe" xml[0, 2] = "" - ::Encoding::UTF_16LE - else - if /\A\s*<\?xml\s+version\s*=\s*(['"]).*?\1 - \s+encoding\s*=\s*(["'])(.*?)\2/mx =~ xml - encoding_name = $3 - if /\Autf-16\z/i =~ encoding_name - ::Encoding::UTF_16BE - else - find_encoding(encoding_name) - end - else - ::Encoding::UTF_8 - end + return 'UTF-16LE' end + xml =~ /^\s*<\?xml\s+version\s*=\s*(['"]).*?\1\s+encoding\s*=\s*(["'])(.*?)\2/m + return $3 ? $3.upcase : 'UTF-8' end def encode(string) @@ -53,14 +44,19 @@ module REXML private def find_encoding(name) case name - when "UTF-16" - name = "UTF-16BE" when /\Ashift-jis\z/i - name = "Shift_JIS" + return "SHIFT_JIS" when /\ACP-(\d+)\z/ name = "CP#{$1}" + when /\AUTF-8\z/i + return name + end + begin + ::Encoding::Converter.search_convpath(name, 'UTF-8') + rescue ::Encoding::ConverterNotFoundError + return nil end - ::Encoding.find(name) + name end end end |