code: def fsn2bytes(path, encoding="utf-8"):
      
  
      path = _fsn2native(path)
  
      if is_win:
          if encoding is None:
              raise ValueError("invalid encoding %r" % encoding)
  
          try:
              return _winpath2bytes(path, encoding)
          except LookupError:
              raise ValueError("invalid encoding %r" % encoding)
      else:
          return path
docs: Args:
          path (fsnative): The path to convert
          encoding (`str`): encoding used for Windows
      Returns:
          `bytes`
      Raises:
          TypeError: If no `fsnative` path is passed
          ValueError: If encoding fails or the encoding is invalid
  
      Converts a `fsnative` path to `bytes`.
  
      The passed *encoding* is only used on platforms where paths are not
      associated with an encoding (Windows for example).
  
      For Windows paths, lone surrogates will be encoded like normal code points
      and surrogate pairs will be merged before encoding. In case of ``utf-8``
      or ``utf-16-le`` this is equal to the `WTF-8 and WTF-16 encoding
      <https://simonsapin.github.io/wtf-8/>`__.