class HTTParty::TextEncoder
Attributes
Public Class Methods
Source
# File lib/httparty/text_encoder.rb, line 7 def initialize(text, assume_utf16_is_big_endian: true, content_type: nil) @text = +text @content_type = content_type @assume_utf16_is_big_endian = assume_utf16_is_big_endian end
Public Instance Methods
Source
# File lib/httparty/text_encoder.rb, line 13 def call if can_encode? encoded_text else text end end
Private Instance Methods
Source
# File lib/httparty/text_encoder.rb, line 23 def can_encode? ''.respond_to?(:encoding) && charset end
Source
# File lib/httparty/text_encoder.rb, line 60 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
Source
# File lib/httparty/text_encoder.rb, line 35 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
Source
# File lib/httparty/text_encoder.rb, line 51 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
Source
# File lib/httparty/text_encoder.rb, line 27 def encoded_text if 'utf-16'.casecmp(charset) == 0 encode_utf_16 else encode_with_ruby_encoding end end