| Module | REXML::Encoding |
| In: |
|
Constants
| SJISTOU8 | = | '-Swm0' | ||
| U8TOSJIS | = | '-Wsm0' | ||
| EUCTOU8 | = | '-Ewm0' | ||
| U8TOEUC | = | '-Wem0' | ||
| 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
Public Instance methods
49: def check_encoding str 50: # We have to recognize UTF-16, LSB UTF-16, and UTF-8 51: return UTF_16 if str[0] == 254 && str[1] == 255 52: return UNILE if str[0] == 255 && str[1] == 254 54: return $1.upcase if $1 55: return UTF_8 56: end
18: def decode_unile(str) 19: array_enc=str.unpack('C*') 20: array_utf8 = [] 21: 2.step(array_enc.size-1, 2){|i| 22: array_utf8 << (array_enc.at(i) + array_enc.at(i+1)*0x100) 23: } 24: array_utf8.pack('U*') 25: end
18: def decode_utf16(str) 19: array_enc=str.unpack('C*') 20: array_utf8 = [] 21: 2.step(array_enc.size-1, 2){|i| 22: array_utf8 << (array_enc.at(i+1) + array_enc.at(i)*0x100) 23: } 24: array_utf8.pack('U*') 25: end
Convert from UTF-8
4: def encode_ascii content 5: array_utf8 = content.unpack('U*') 6: array_enc = [] 7: array_utf8.each do |num| 8: if num <= 0x7F 9: array_enc << num 10: else 11: # Numeric entity (&#nnnn;); shard by Stefan Scholl 12: array_enc.concat "&\##{num};".unpack('C*') 13: end 14: end 15: array_enc.pack('C*') 16: end
3: def encode_unile content 4: array_utf8 = content.unpack("U*") 5: array_enc = [] 6: array_utf8.each do |num| 7: if ((num>>16) > 0) 8: array_enc << ?? 9: array_enc << 0 10: else 11: array_enc << (num & 0xFF) 12: array_enc << (num >> 8) 13: end 14: end 15: array_enc.pack('C*') 16: end
3: def encode_utf16 content 4: array_utf8 = content.unpack("U*") 5: array_enc = [] 6: array_utf8.each do |num| 7: if ((num>>16) > 0) 8: array_enc << 0 9: array_enc << ?? 10: else 11: array_enc << (num >> 8) 12: array_enc << (num & 0xFF) 13: end 14: end 15: array_enc.pack('C*') 16: end
23: def encoding=( enc ) 24: old_verbosity = $VERBOSE 25: begin 26: $VERBOSE = false 27: return if defined? @encoding and enc == @encoding 28: if enc 29: raise ArgumentError, "Bad encoding name #{enc}" unless /\A[\w-]+\z/n =~ enc 30: @encoding = enc.upcase.untaint 31: else 32: @encoding = UTF_8 33: end 34: err = nil 35: [@encoding, "ICONV"].each do |enc| 36: begin 38: return Encoding.apply(self, enc) 39: rescue LoadError, Exception => err 40: end 41: end 42: puts err.message 43: raise ArgumentError, "No decoder found for encoding #@encoding. Please install iconv." 44: ensure 45: $VERBOSE = old_verbosity 46: end 47: end