module VCR::Normalizers::Body::ClassMethods

def try_encode_string(string, encoding_name)

def try_encode_string(string, encoding_name)
  return string if encoding_name.nil?
  encoding = Encoding.find(encoding_name)
  return string if string.encoding == encoding
  # ASCII-8BIT just means binary, so encoding to it is nonsensical
  # and yet "\u00f6".encode("ASCII-8BIT") raises an error.
  # Instead, we'll force encode it (essentially just tagging it as binary)
  return string.force_encoding(encoding) if encoding == Encoding::BINARY
  string.encode(encoding)
rescue EncodingError => e
  struct_type = name.split('::').last.downcase
  warn "VCR: got `#{e.class.name}: #{e.message}` while trying to encode the #{string.encoding.name} " +
       "#{struct_type} body to the original body encoding (#{encoding}). Consider using the " +
       "`:preserve_exact_body_bytes` option to work around this."
  return string
end