docs: def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
      """
      Similar to smart_bytes, except that lazy instances are resolved to
      strings, rather than kept as lazy objects.
      If strings_only is True, don't convert (some) non-string-like objects.
      """
      # Handle the common case first for performance reasons.
      if isinstance(s, bytes):
          if encoding == 'utf-8':
              return s
          else:
              return s.decode('utf-8', errors).encode(encoding, errors)
      if strings_only and is_protected_type(s):
          return s
      if isinstance(s, memoryview):
          return bytes(s)
      if not isinstance(s, str):
          return str(s).encode(encoding, errors)
      else:
          return s.encode(encoding, errors)