class HTTParty::TextEncoder
Attributes
assume_utf16_is_big_endian[R]
content_type[R]
text[R]
Public Class Methods
new(text, assume_utf16_is_big_endian: true, content_type: nil)
click to toggle source
# File lib/httparty/text_encoder.rb, line 5 def initialize(text, assume_utf16_is_big_endian: true, content_type: nil) @text = text.dup @content_type = content_type @assume_utf16_is_big_endian = assume_utf16_is_big_endian end
Public Instance Methods
call()
click to toggle source
# File lib/httparty/text_encoder.rb, line 11 def call if can_encode? encoded_text else text end end
Private Instance Methods
can_encode?()
click to toggle source
# File lib/httparty/text_encoder.rb, line 21 def can_encode? ''.respond_to?(:encoding) && charset end
charset()
click to toggle source
# File lib/httparty/text_encoder.rb, line 58 def charset return nil if content_type.nil? if (matchdata = content_type.match(/;\s*charset\s*=\s*([^=,;"\s]+)/i)) return matchdata.captures.first end if (matchdata = content_type.match(/;\s*charset\s*=\s*"((\\.|[^\\"])+)"/i)) return matchdata.captures.first.gsub(/\\(.)/, '\1') end end
encode_utf_16()
click to toggle source
# File lib/httparty/text_encoder.rb, line 33 def encode_utf_16 if text.bytesize >= 2 if text.getbyte(0) == 0xFF && text.getbyte(1) == 0xFE return text.force_encoding("UTF-16LE") elsif text.getbyte(0) == 0xFE && text.getbyte(1) == 0xFF return text.force_encoding("UTF-16BE") end end if assume_utf16_is_big_endian # option text.force_encoding("UTF-16BE") else text.force_encoding("UTF-16LE") end end
encode_with_ruby_encoding()
click to toggle source
# File lib/httparty/text_encoder.rb, line 49 def encode_with_ruby_encoding # NOTE: This will raise an argument error if the # charset does not exist encoding = Encoding.find(charset) text.force_encoding(encoding.to_s) rescue ArgumentError text end
encoded_text()
click to toggle source
# File lib/httparty/text_encoder.rb, line 25 def encoded_text if 'utf-16'.casecmp(charset) == 0 encode_utf_16 else encode_with_ruby_encoding end end