FTP 服务器是否支持 UTF-16 编码?

FTP 服务器是否支持 UTF-16 编码?

我正在检查我的应用程序是否使用了不同的编码技术。在一个与 FTP 服务器相关的用例中,我没有看到任何与 UTF-16 相关的内容。这意味着如果 FTP 服务器使用 UTF-8,我可以登录它,如果我将其更改为 UTF-16,我将无法登录 FTP 服务器。我已从该服务器上的客户端执行了“FEAT”,但在响应中没有看到 UTF-16。这是否意味着我的 FTP 服务器不支持它?

我可以通过执行命令在 FTP 服务器上启用 UTF-8 OPTS UTF8 ON。是否有这样的命令可以在 FTP 服务器上启用 UTF-16,或者它不支持 UTF-16?

FEAT以下是命令的响应

Command:    FEAT
Response:   211-Features:
Response:    MDTM
Response:    REST STREAM
Response:    SIZE
Response:    MLST type*;size*;modify*;perm*;
Response:    MLSD
Response:    AUTH SSL
Response:    AUTH TLS
Response:    PROT
Response:    PBSZ
Response:    **UTF8**
Response:    TVFS
Response:    EPSV
Response:    EPRT
Response:    MFMT
Response:   211 End

** 注意:HTTP/HTTPS 同时支持 UTF-8 和 UTF-16,我可以在其中登录

在进入 codng 之前我尝试过的步骤

  1. 在本地创建 FTP 服务器并设置目录

  2. 从 FTP 客户端 (FileZilla) 连接到 FTP 服务器

    • 当我的字符集为 UTF-8 时,连接成功。
    • 当我的字符集为 UTF-16 时,连接失败 在此处输入图片描述以下是回复

    以下是日志状态:连接已建立,正在等待欢迎消息...响应:㈲ⴰ楆敬楚汬⁡敓癲牥ㄠ㐮ㄮ错误:无法连接到服务器状态:正在等待重试...状态:正在解析本地主机的地址状态:连接到 127.0.0.1:21...状态:连接已建立,正在等待欢迎消息...响应:㈲ⴰ楆敬楚汬⁡敓癲牥ㄠ㐮ㄮ错误:无法连接到服务器

答案1

FTP 不支持 UTF-16。它是一种基于文本的协议,使用 ASCII 进行命令和响应;它之所以能够支持 UTF-8,只是因为后者是 ASCII 的超集(例如,像 这样的命令FEAT在两种编码方式中完全相同)。这同样适用于较旧的编码,例如 ISO-8859,但是才不是适用于 UTF-16 – 初始服务器问候语(始终为 ASCII)将不会被期望 UTF-16 的客户端理解,并且以 UTF-16 发送的命令也不会被服务器理解。

然而,通常情况下,没有实际需要同时支持这两种编码——UTF-8 和 UTF-16 只是相同 Unicode 代码点的不同表示;任何可以编码为 UTF-16 的文件名也可以编码为 UTF-8,反之亦然。例如,尽管 Windows 内部使用 UTF-16 作为文件名,但 Windows FTP 服务器仍然使用 UTF-8,只需根据需要在两者之间进行转换即可。

相关内容