Module: Encodings

Defined in:
lib/encodings.rb

Class Method Summary collapse

Class Method Details

.delete_bom!(string) ⇒ Object



28
29
30
31
# File 'lib/encodings.rb', line 28

def self.delete_bom!(string)
  string.sub!(/\A\xEF\xBB\xBF/, "") unless string.blank?
  string
end

.force_utf8(string) ⇒ Object



23
24
25
26
# File 'lib/encodings.rb', line 23

def self.force_utf8(string)
  encoded_string = string.encode(Encoding::UTF_8, undef: :replace, invalid: :replace, replace: "")
  delete_bom!(encoded_string)
end

.to_utf8(string) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/encodings.rb', line 6

def self.to_utf8(string)
  result = CharDet.detect(string)

  encoded_string = try_utf8(string, result["encoding"]) if result && result["encoding"]
  encoded_string = force_utf8(string) if encoded_string.nil?
  encoded_string
end

.try_utf8(string, source_encoding) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/encodings.rb', line 14

def self.try_utf8(string, source_encoding)
  encoded = string.encode(Encoding::UTF_8, source_encoding)
  encoded&.valid_encoding? ? delete_bom!(encoded) : nil
rescue Encoding::InvalidByteSequenceError,
       Encoding::UndefinedConversionError,
       Encoding::ConverterNotFoundError
  nil
end