Module: REXML::Encoding

Module | REXML::Encoding
In: | rexml/encodings/UTF-8.rb rexml/encodings/UTF-16.rb rexml/encodings/US-ASCII.rb rexml/encodings/UNILE.rb rexml/encodings/SHIFT-JIS.rb rexml/encodings/ISO-8859-15.rb rexml/encodings/ISO-8859-1.rb rexml/encodings/ICONV.rb rexml/encodings/EUC-JP.rb rexml/encodings/CP-1252.rb rexml/encoding.rb

### Methods

apply check_encoding decode_ascii decode_eucjp decode_iconv decode_sjis decode_unile decode_utf16 decode_utf8 encode_ascii encode_eucjp encode_iconv encode_sjis encode_unile encode_utf16 encode_utf8 encoding= encoding_method register

### Constants

UTF_8 | = | 'UTF-8' |  | Native, default format is UTF-8, so it is declared here rather than in an encodings/ definition.
UTF_16 | = | 'UTF-16'
UNILE | = | 'UNILE'

### Attributes

encoding | [R] | ID —> Encoding name

### Public Class methods

apply(obj, enc)

[Source]

    # File rexml/encoding.rb, line 8
                   def self.apply(obj, enc)
                           @encoding_methods[enc][obj]
                   end

encoding_method(enc)

[Source]

    # File rexml/encoding.rb, line 11
                   def self.encoding_method(enc)
                           @encoding_methods[enc]
                   end

register(enc, &block)

[Source]

    # File rexml/encoding.rb, line 5
                   def self.register(enc, &block)
                           @encoding_methods[enc] = block
                   end

### Public Instance methods

check_encoding(str)

[Source]

    # File rexml/encoding.rb, line 55
                    def check_encoding str
                            # We have to recognize UTF-16, LSB UTF-16, and UTF-8
                            return UTF_16 if str[0] == 254 && str[1] == 255
                            return UNILE if str[0] == 255 && str[1] == 254
                            str =~ /^\s*<?xml\s*version=(['"]).*?\2\s*encoding=(["'])(.*?)\2/um
                            return $1.upcase if $1
                            return UTF_8
                    end

decode_ascii(str)

Convert to UTF-8

[Source]

    # File rexml/encodings/US-ASCII.rb, line 19
        def decode_ascii(str)
          str.unpack('C*').pack('U*')
        end

decode_eucjp(str)

[Source]

    # File rexml/encodings/EUC-JP.rb, line 5
        def decode_eucjp(str)
          Uconv::euctou8(str)
        end

decode_iconv(str)

[Source]

    # File rexml/encodings/ICONV.rb, line 6
        def decode_iconv(str)
          Iconv.conv(UTF_8, @encoding, str)
        end

decode_sjis(content)

[Source]

    # File rexml/encodings/SHIFT-JIS.rb, line 5
        def decode_sjis content
          Uconv::sjistou8(content)
        end

decode_unile(str)

[Source]

    # File rexml/encodings/UNILE.rb, line 18
        def decode_unile(str)
          array_enc=str.unpack('C*')
          array_utf8 = []
          2.step(array_enc.size-1, 2){|i|
            array_utf8 << (array_enc.at(i) + array_enc.at(i+1)*0x100)
          }
          array_utf8.pack('U*')
        end

decode_utf16(str)

[Source]

    # File rexml/encodings/UTF-16.rb, line 18
        def decode_utf16(str)
          array_enc=str.unpack('C*')
          array_utf8 = []
          2.step(array_enc.size-1, 2){|i|
            array_utf8 << (array_enc.at(i+1) + array_enc.at(i)*0x100)
          }
          array_utf8.pack('U*')
        end

decode_utf8(str)

[Source]

    # File rexml/encodings/UTF-8.rb, line 7
        def decode_utf8(str)
          str
        end

encode_ascii(content)

Convert from UTF-8

[Source]

    # File rexml/encodings/US-ASCII.rb, line 4
        def encode_ascii content
          array_utf8 = content.unpack('U*')
          array_enc = []
          array_utf8.each do |num|
            if num <= 0x7F
              array_enc << num
            else
              # Numeric entity (&#nnnn;); shard by  Stefan Scholl
              array_enc.concat "&\##{num};".unpack('C*')
            end
          end
          array_enc.pack('C*')
        end

encode_eucjp(content)

[Source]

    # File rexml/encodings/EUC-JP.rb, line 9
        def encode_eucjp content
          Uconv::u8toeuc(content)
        end

encode_iconv(content)

[Source]

    # File rexml/encodings/ICONV.rb, line 10
        def encode_iconv(content)
          Iconv.conv(@encoding, UTF_8, content)
        end

encode_sjis(str)

[Source]

    # File rexml/encodings/SHIFT-JIS.rb, line 9
        def encode_sjis(str)
          Uconv::u8tosjis(str)
        end

encode_unile(content)

[Source]

    # File rexml/encodings/UNILE.rb, line 3
        def encode_unile content
          array_utf8 = content.unpack("U*")
          array_enc = []
          array_utf8.each do |num|
            if ((num>>16) > 0)
              array_enc << ??
              array_enc << 0
            else
              array_enc << (num & 0xFF)
              array_enc << (num >> 8)
            end
          end
          array_enc.pack('C*')
        end

encode_utf16(content)

[Source]

    # File rexml/encodings/UTF-16.rb, line 3
        def encode_utf16 content
          array_utf8 = content.unpack("U*")
          array_enc = []
          array_utf8.each do |num|
            if ((num>>16) > 0)
              array_enc << 0
              array_enc << ??
            else
              array_enc << (num >> 8)
              array_enc << (num & 0xFF)
            end
          end
          array_enc.pack('C*')
        end

encode_utf8(content)

[Source]

    # File rexml/encodings/UTF-8.rb, line 3
        def encode_utf8 content
          content
        end

encoding=( enc )

[Source]

    # File rexml/encoding.rb, line 23
                    def encoding=( enc )
                            old_verbosity = $VERBOSE
                            begin
                                    $VERBOSE = false
                                    return if defined? @encoding and enc == @encoding
                                    if enc and enc != UTF_8
                                            @encoding = enc.upcase
                                            begin
                                                   require 'rexml/encodings/ICONV.rb'
                                                   Encoding.apply(self, "ICONV")
                                            rescue LoadError, Exception => err
                                                   raise ArgumentError, "Bad encoding name #@encoding" unless @encoding =~ /^[\w-]+$/
                                                    @encoding.untaint
                                                    enc_file = File.join( "rexml", "encodings", "#@encoding.rb" )
                                                    begin
                                                           require enc_file
                                                           Encoding.apply(self, @encoding)
                                                    rescue LoadError
                                                           puts $!.message
                                                           raise ArgumentError, "No decoder found for encoding #@encoding.  Please install iconv."
                                                    end
                                            end
                                    else
                                           @encoding = UTF_8
                                           require 'rexml/encodings/UTF-8.rb'
                                           Encoding.apply(self, @encoding)
                                    end
                            ensure
                                    $VERBOSE = old_verbosity
                            end
                    end

[Validate]