diff --git a/ftp.go b/ftp.go index 5226e34..209146d 100644 --- a/ftp.go +++ b/ftp.go @@ -94,6 +94,12 @@ func DialTimeout(addr string, timeout time.Duration) (*ServerConn, error) { return nil, err } + err = c.setUTF8() + if err != nil { + c.Quit() + return nil, err + } + return c, nil } @@ -164,6 +170,24 @@ func (c *ServerConn) feat() error { return nil } +// setUTF8 issues an "OPTS UTF8 ON" command. +func (c *ServerConn) setUTF8() error { + if _, ok := c.features["UTF8"]; !ok { + return nil + } + + code, message, err := c.cmd(-1, "OPTS UTF8 ON") + if err != nil { + return err + } + + if code != StatusCommandOK { + return errors.New(message) + } + + return nil +} + // epsv issues an "EPSV" command to get a port number for a data connection. func (c *ServerConn) epsv() (port int, err error) { _, line, err := c.cmd(StatusExtendedPassiveMode, "EPSV")